Update of explore-JULES-ES-1p0.Rmd that uses the new packages and functions
We build and test gaussian process emulators, perform a sensitivity analyis, and constrain the input space of Jules.
Andy thinks there might be mileage in analysing the atmospheric growth, which is here. /home/h01/hadaw/Research/ES_PPE/Oct20
At the moment, this vignette is hampered by the fact that emulators are failing on a few of the outputs which represent change over the historical period. The emulator is fine for predicting absolute values in the modern period.
Andy would like to see timeseries of: cVeg, cSoil and nbp, npp in GtC and GtC/yr.
Load libraries, functions and data.
# Load helper functions
knitr::opts_chunk$set(fig.path = "figs/", echo = TRUE, message = FALSE, warnings = FALSE)
# load some helper functions
source('~/brazilCSSP/code/brazil_cssp/per_pft.R') # eventually, move the relevant functions
source('explore-JULES-ES-1p0_PPE_functions.R')
# Load packages
library(RColorBrewer)
library(fields)
library(MASS)
library(DiceKriging)
library(DiceEval)
library(ncdf4)
library(ncdf4.helpers)
library(readxl)
library(foreach)
library(emtools)
library(imptools)
library(viztools)
library(julesR)
# Some pallete options
yg = brewer.pal(9, "YlGn")
ryb = brewer.pal(11, "RdYlBu")
byr = rev(ryb)
rb = brewer.pal(11, "RdBu")
br = rev(rb)
blues = brewer.pal(9, 'Blues')
cbPal <- c("#000000", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
ysec = 60*60*24*365
years <- 1850:2013
Section 2.5 in Friedlingstein et al. describes how the land carbon sink is estimated.
# Question: How closely should our model match this curve? Which output?
# (My guess is 'Total Land Carbon anomaly')
historical_carbon_budget <- read_excel('Global_Carbon_Budget_2020v1.0.xlsx', sheet = "Historical Budget", skip = 15)
par(mfrow = c(3,1))
ylim = c(-1, 6)
plot(historical_carbon_budget$Year, historical_carbon_budget$`land sink`, type = 'l', bty = 'n', ylim = ylim)
plot(historical_carbon_budget$Year, historical_carbon_budget$`land-use change emissions`, type = 'l', bty = 'n', ylim = ylim)
plot(historical_carbon_budget$Year, historical_carbon_budget$`atmospheric growth`, type = 'l', bty = 'n', ylim = ylim)
ensloc <- '/project/carbon_ppe/JULES-ES-1p0_PPE/'
ensmember <- 'P0000/'
subdir <- 'stats/'
floc <- paste0(ensloc,ensmember,subdir)
fn <- 'JULES-ES-1p0_P0000_Annual_global.nc'
# test file
nc <- nc_open(paste0(floc,fn))
# What variables are in the file?
varlist <- nc.get.variable.list(nc)
for(i in 1:length(varlist)){
var <- varlist[i]
print(var)
print(ncatt_get(nc,var,"long_name")[[2]])
}
extractTimeseries <- function(nc, variable){
dat <- ncvar_get(nc, variable)
out <- dat
out
}
makeTimeseriesEnsemble <- function(variable, nens = 499, nts = 164, cn = 1850:2013){
# nens is number of ensemble members
# nts length of timeseries
# cn is colnames()
datmat <- matrix(NA, nrow = nens, ncol = nts)
colnames(datmat) <- cn
enslist <- paste("P", formatC(0:(nens-1), width=4, flag="0"), sep="")
floc <- paste0(ensloc,ensmember,subdir)
for(i in 1:nens){
vec <- rep(NA,nts)
ensmember <- enslist[i]
fn <- paste0(ensloc,ensmember,'/stats/','JULES-ES-1p0_',ensmember,'_Annual_global.nc')
try(nc <- nc_open(paste0(fn)))
try(dat <- extractTimeseries(nc, variable))
datmat[i, ] <- dat
nc_close(nc)
}
datmat
}
par(mfrow= c(3,4), las = 1)
plotcol <- c(makeTransparent('black', 70))
ylim = range(c(npp_ens[,1], npp_ens[,164]))
matplot(years, t(npp_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'NPP', xlab = '',
bty = 'n')
ylim = range(c(cSoil_ens[,1], cSoil_ens[,164]))
matplot(years, t(cSoil_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'Soil Carbon',xlab = '',
bty = 'n')
ylim = range(c(cVeg_ens[,1], cVeg_ens[,164]))
matplot(years, t(cVeg_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'Vegetation Carbon',xlab = '',
bty = 'n')
ylim = range(total_land_carbon_ens)
matplot(years, t(total_land_carbon_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'Total Land Carbon',xlab = '',
bty = 'n')
ylim = range(lai_lnd_mean_ens)
matplot(years, t(lai_lnd_mean_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'LAI', main = 'Leaf area index',xlab = '',
bty = 'n')
ylim = range(treeFrac_lnd_mean_ens)
matplot(years, t(treeFrac_lnd_mean_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'fraction', main = 'Tree fraction',xlab = '',
bty = 'n')
ylim = range(shrubFrac_lnd_mean_ens)
matplot(years, t(shrubFrac_lnd_mean_ens ), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'fraction', main = 'Shrub fraction',xlab = '',
bty = 'n')
ylim = range(baresoilFrac_lnd_mean_ens)
matplot(years, t(baresoilFrac_lnd_mean_ens ), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'fraction', main = 'bare soil fraction',xlab = '',
bty = 'n')
ylim = c(-10, 10)
matplot(years, t(nbp_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'NBP', xlab = '',
bty = 'n')
ylim = range(rh_lnd_sum_ens)
matplot(years, t(rh_lnd_sum_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC/year', main = 'Heterotrophic Respiration', xlab = '',
bty = 'n')
ylim = range(fLuc_lnd_sum_ens)
matplot(years, t(fLuc_lnd_sum_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC/year', main = 'Land use change emissions', xlab = '',
bty = 'n')
ylim = range(fHarvest_lnd_sum_ens)
matplot(years, t(fHarvest_lnd_sum_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC/year', main = 'Harvest C flux to atmosphere', xlab = '',
bty = 'n')
NA
NA
NA
NA
npp_ens_anom <- anomalizeTSmatrix(npp_ens, 1:20)
nbp_ens_anom <- anomalizeTSmatrix(nbp_ens, 1:20)
cSoil_ens_anom <- anomalizeTSmatrix(cSoil_ens, 1:20)
cVeg_ens_anom <- anomalizeTSmatrix(cVeg_ens, 1:20)
total_land_carbon_anom <- anomalizeTSmatrix(total_land_carbon_ens, 1:20)
par(mfrow= c(1,4), las = 1)
# ylim = range(-10, 10)
#matplot(years, t(nbp_ens_anom), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
# ylab = 'NBP sum Anomaly', main = 'NBP Anomaly',
# bty = 'n')
ylim = range(c(npp_ens_anom[,1], npp_ens_anom[,164]))
matplot(years, t(npp_ens_anom), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'NPP sum Anomaly', main = 'NPP Anomaly',
bty = 'n')
ylim = range(c(cSoil_ens_anom[,1], cSoil_ens_anom[,164]))
matplot(years, t(cSoil_ens_anom), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'Soil Carbon Anomaly',
bty = 'n')
ylim = range(c(cVeg_ens_anom[,1], cVeg_ens_anom[,164]))
matplot(years, t(cVeg_ens_anom), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'Vegetation Carbon Anomaly',
bty = 'n')
ylim = range(total_land_carbon_anom)
matplot(years, t(total_land_carbon_anom), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'Total Land Carbon Anomaly',
bty = 'n')
NA
NA
# for each of the variables in the file, average the last 20 years as the "modern" value,
# and then place in a matrix
modernValue <- function(nc, variable, ix){
# A basic function to read a variable and
# take the mean of the timeseries at locations ix
dat <- ncvar_get(nc, variable)
out <- mean(dat[ix])
out
}
#144:164 is the 1993:2013
modernValue(nc = nc, variable = "npp_nlim_lnd_mean", ix = 144:164)
# apply to the test file to check it works
vec <- sapply(varlist, FUN = modernValue, nc = nc, ix = 144:164)
# Generate ensemble numbers, mean of the last 20 years of the timeseries (1994-2013)
if (file.exists("ensemble.rdata")) {
load("ensemble.rdata")
} else {
nens = 499
datmat <- matrix(nrow = nens, ncol = length(varlist))
colnames(datmat) <- varlist
enslist <- paste("P", formatC(0:(nens-1), width=4, flag="0"), sep="")
floc <- paste0(ensloc,ensmember,subdir)
for(i in 1:nens){
vec <- rep(NA, length(varlist))
ensmember <- enslist[i]
fn <- paste0(ensloc,ensmember,'/stats/','JULES-ES-1p0_',ensmember,'_Annual_global.nc')
#print(fn)
try(nc <- nc_open(paste0(fn)))
try(vec <- sapply(varlist, FUN = modernValue, nc = nc, ix = 144:164))
datmat[i, ] <- vec
nc_close(nc)
}
save(nens, datmat,enslist,floc, file ="ensemble.rdata")
}
For each ensemble member and each variable, calculate the change from the 20 years at the start of the run, to the twenty years at the end of the run.
extractTimeseries <- function(nc, variable){
dat <- ncvar_get(nc, variable)
out <- dat
out
}
makeTimeseriesEnsemble <- function(variable, nens = 499, nts = 164, cn = 1850:2013){
# nens is number of ensemble members
# nts length of timeseries
# cn is colnames()
datmat <- matrix(NA, nrow = nens, ncol = nts)
colnames(datmat) <- cn
enslist <- paste("P", formatC(0:(nens-1), width=4, flag="0"), sep="")
floc <- paste0(ensloc,ensmember,subdir)
for(i in 1:nens){
vec <- rep(NA,nts)
ensmember <- enslist[i]
fn <- paste0(ensloc,ensmember,'/stats/','JULES-ES-1p0_',ensmember,'_Annual_global.nc')
try(nc <- nc_open(paste0(fn)))
try(dat <- extractTimeseries(nc, variable))
datmat[i, ] <- dat
nc_close(nc)
}
datmat
}
# Generate ensemble mean of the last 20 years of the timeseries (1994-2013)
if (file.exists("anomaly_ensemble.rdata")) {
load("anomaly_ensemble.rdata")
} else {
nens = 499
datmatAnom <- matrix(nrow = nens, ncol = length(varlist))
colnames(datmatAnom) <- varlist
enslist <- paste("P", formatC(0:(nens-1), width=4, flag="0"), sep="")
floc <- paste0(ensloc,ensmember,subdir)
for(i in 1:nens){
vec <- rep(NA, length(varlist))
ensmember <- enslist[i]
fn <- paste0(ensloc,ensmember,'/stats/','JULES-ES-1p0_',ensmember,'_Annual_global.nc')
#print(fn)
try(nc <- nc_open(paste0(fn)))
try(vec <- sapply(varlist, FUN = tsAnomaly, nc = nc))
datmatAnom[i, ] <- vec
nc_close(nc)
}
save(nens, datmatAnom, enslist,floc, file ="anomaly_ensemble.rdata")
}
Initial clean of data set, removing variables that don’t change, and removing NAs (models that didn’t run).
Y_nlevel0_ix <- which(is.na(datmat[,'year']))
YAnom_nlevel0_ix <- which(is.na(datmatAnom[,'year']))
# This should be true to proceed, or we'll have to start excluding the combined set.
identical(Y_nlevel0_ix, YAnom_nlevel0_ix)
[1] TRUE
# Y is the whole data set
Y <- datmat
# Y_level0 is the 'cleaned' data set, truncated to variables that change, and removing NAs
Y_level0 <- datmat[-Y_nlevel0_ix, -c(2,30,31)]
Y_nlevel0 <- datmat[Y_nlevel0_ix, -c(2, 30, 31)]
# Y is the whole data set
YAnom <- datmatAnom
# Y.level0 is the 'cleaned' data set, truncated to variables that change, and removing NAs
YAnom_level0 <- datmatAnom[-YAnom_nlevel0_ix, -c(2,30,31)]
YAnom_nlevel0 <- datmatAnom[YAnom_nlevel0_ix, -c(2,30,31)]
# load the original design and input space, normalize to [0-1]
# Load up the data
lhs_i = read.table('~/brazilCSSP/code/brazil_cssp/analyze_u-ao732/data/ES_PPE_i/lhs_u-ao732.txt', header = TRUE)
lhs_ii = read.table('~/brazilCSSP/code/brazil_cssp/analyze_u-ao732/data/ES_PPE_ii/lhs_u-ao732a.txt', header = TRUE)
toplevel_ix = 1:499
# The raw input data is a latin hypercube
lhs = rbind(lhs_i, lhs_ii)[toplevel_ix, ]
lhs_level0 <- lhs[-Y_nlevel0_ix,]
X = normalize(lhs)
colnames(X) = colnames(lhs)
X_level0 <- X[-Y_nlevel0_ix,]
X_nlevel0 <- X[Y_nlevel0_ix,]
d = ncol(X)
# lower and higher bound on the normalised matrix for visualisation
rx = rbind(rep(0,32), rep(1,32))
(“probability of run failure” Could be an interesting project - logit transformation for probability of run failure? Some other ML like SVM?
There are clear run failure thresholds in the parameters rootd_ft_io and lai_max, and quite strong visual indications that a_wl_io and bio_hum_cn matter.
NEXT, histograms of failure with the LHS value
# NB, plotting the inverse of this doesn't give you much information
#simple way
par(oma = c(10,10,0,0))
#par(xpd = TRUE)
pairs(X_nlevel0,
xlim = c(0,1), ylim = c(0,1),
labels = 1:d,
col = makeTransparent('red', 150),
gap = 0,
pch = 20,
xaxt ='n', yaxt = 'n',
lower.panel = NULL)
reset()
legend('left', legend = paste(1:d, colnames(lhs)), cex = 1.2, bty = 'n')
#ynames_const <- c('nbp_lnd_sum', 'npp_nlim_lnd_sum', 'cSoil_lnd_sum', 'cVeg_lnd_sum')
#yunits_const <- c('GtC/year', 'GtC/year', 'GtC', 'GtC')
#Y_const_level1 <- Y_level1[, ynames_const]
# primary carbon cycle outputs
npp_ens <- makeTimeseriesEnsemble(variable = "npp_nlim_lnd_sum") / (1e12/ysec)
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0069/stats/JULES-ES-1p0_P0069_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0086/stats/JULES-ES-1p0_P0086_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0144/stats/JULES-ES-1p0_P0144_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0165/stats/JULES-ES-1p0_P0165_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0168/stats/JULES-ES-1p0_P0168_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0183/stats/JULES-ES-1p0_P0183_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0185/stats/JULES-ES-1p0_P0185_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0214/stats/JULES-ES-1p0_P0214_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0216/stats/JULES-ES-1p0_P0216_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0235/stats/JULES-ES-1p0_P0235_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0238/stats/JULES-ES-1p0_P0238_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0251/stats/JULES-ES-1p0_P0251_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0259/stats/JULES-ES-1p0_P0259_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0285/stats/JULES-ES-1p0_P0285_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0357/stats/JULES-ES-1p0_P0357_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0376/stats/JULES-ES-1p0_P0376_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0387/stats/JULES-ES-1p0_P0387_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0394/stats/JULES-ES-1p0_P0394_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0405/stats/JULES-ES-1p0_P0405_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0424/stats/JULES-ES-1p0_P0424_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0455/stats/JULES-ES-1p0_P0455_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0457/stats/JULES-ES-1p0_P0457_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
nbp_ens <- makeTimeseriesEnsemble(variable = "nbp_lnd_sum") / (1e12/ysec)
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0069/stats/JULES-ES-1p0_P0069_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0086/stats/JULES-ES-1p0_P0086_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0144/stats/JULES-ES-1p0_P0144_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0165/stats/JULES-ES-1p0_P0165_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0168/stats/JULES-ES-1p0_P0168_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0183/stats/JULES-ES-1p0_P0183_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0185/stats/JULES-ES-1p0_P0185_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0214/stats/JULES-ES-1p0_P0214_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0216/stats/JULES-ES-1p0_P0216_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0235/stats/JULES-ES-1p0_P0235_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0238/stats/JULES-ES-1p0_P0238_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0251/stats/JULES-ES-1p0_P0251_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0259/stats/JULES-ES-1p0_P0259_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0285/stats/JULES-ES-1p0_P0285_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0357/stats/JULES-ES-1p0_P0357_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0376/stats/JULES-ES-1p0_P0376_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0387/stats/JULES-ES-1p0_P0387_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0394/stats/JULES-ES-1p0_P0394_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0405/stats/JULES-ES-1p0_P0405_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0424/stats/JULES-ES-1p0_P0424_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0455/stats/JULES-ES-1p0_P0455_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0457/stats/JULES-ES-1p0_P0457_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
cSoil_ens <- makeTimeseriesEnsemble(variable = "cSoil_lnd_sum") / 1e12
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0069/stats/JULES-ES-1p0_P0069_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0086/stats/JULES-ES-1p0_P0086_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0144/stats/JULES-ES-1p0_P0144_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0165/stats/JULES-ES-1p0_P0165_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0168/stats/JULES-ES-1p0_P0168_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0183/stats/JULES-ES-1p0_P0183_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0185/stats/JULES-ES-1p0_P0185_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0214/stats/JULES-ES-1p0_P0214_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0216/stats/JULES-ES-1p0_P0216_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0235/stats/JULES-ES-1p0_P0235_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0238/stats/JULES-ES-1p0_P0238_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0251/stats/JULES-ES-1p0_P0251_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0259/stats/JULES-ES-1p0_P0259_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0285/stats/JULES-ES-1p0_P0285_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0357/stats/JULES-ES-1p0_P0357_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0376/stats/JULES-ES-1p0_P0376_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0387/stats/JULES-ES-1p0_P0387_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0394/stats/JULES-ES-1p0_P0394_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0405/stats/JULES-ES-1p0_P0405_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0424/stats/JULES-ES-1p0_P0424_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0455/stats/JULES-ES-1p0_P0455_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0457/stats/JULES-ES-1p0_P0457_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
cVeg_ens <- makeTimeseriesEnsemble(variable = "cVeg_lnd_sum") / 1e12
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0069/stats/JULES-ES-1p0_P0069_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0086/stats/JULES-ES-1p0_P0086_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0144/stats/JULES-ES-1p0_P0144_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0165/stats/JULES-ES-1p0_P0165_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0168/stats/JULES-ES-1p0_P0168_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0183/stats/JULES-ES-1p0_P0183_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0185/stats/JULES-ES-1p0_P0185_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0214/stats/JULES-ES-1p0_P0214_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0216/stats/JULES-ES-1p0_P0216_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0235/stats/JULES-ES-1p0_P0235_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0238/stats/JULES-ES-1p0_P0238_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0251/stats/JULES-ES-1p0_P0251_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0259/stats/JULES-ES-1p0_P0259_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0285/stats/JULES-ES-1p0_P0285_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0357/stats/JULES-ES-1p0_P0357_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0376/stats/JULES-ES-1p0_P0376_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0387/stats/JULES-ES-1p0_P0387_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0394/stats/JULES-ES-1p0_P0394_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0405/stats/JULES-ES-1p0_P0405_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0424/stats/JULES-ES-1p0_P0424_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0455/stats/JULES-ES-1p0_P0455_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0457/stats/JULES-ES-1p0_P0457_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
total_land_carbon_ens <- cSoil_ens + cVeg_ens
lai_lnd_mean_ens <- makeTimeseriesEnsemble(variable = "lai_lnd_mean")
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0069/stats/JULES-ES-1p0_P0069_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0086/stats/JULES-ES-1p0_P0086_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0144/stats/JULES-ES-1p0_P0144_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0165/stats/JULES-ES-1p0_P0165_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0168/stats/JULES-ES-1p0_P0168_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0183/stats/JULES-ES-1p0_P0183_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0185/stats/JULES-ES-1p0_P0185_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0214/stats/JULES-ES-1p0_P0214_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0216/stats/JULES-ES-1p0_P0216_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0235/stats/JULES-ES-1p0_P0235_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0238/stats/JULES-ES-1p0_P0238_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0251/stats/JULES-ES-1p0_P0251_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0259/stats/JULES-ES-1p0_P0259_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0285/stats/JULES-ES-1p0_P0285_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0357/stats/JULES-ES-1p0_P0357_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0376/stats/JULES-ES-1p0_P0376_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0387/stats/JULES-ES-1p0_P0387_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0394/stats/JULES-ES-1p0_P0394_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0405/stats/JULES-ES-1p0_P0405_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0424/stats/JULES-ES-1p0_P0424_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0455/stats/JULES-ES-1p0_P0455_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0457/stats/JULES-ES-1p0_P0457_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
# fluxes
rh_lnd_sum_ens <- makeTimeseriesEnsemble(variable = "rh_lnd_sum") / (1e12/ysec)
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0069/stats/JULES-ES-1p0_P0069_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0086/stats/JULES-ES-1p0_P0086_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0144/stats/JULES-ES-1p0_P0144_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0165/stats/JULES-ES-1p0_P0165_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0168/stats/JULES-ES-1p0_P0168_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0183/stats/JULES-ES-1p0_P0183_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0185/stats/JULES-ES-1p0_P0185_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0214/stats/JULES-ES-1p0_P0214_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0216/stats/JULES-ES-1p0_P0216_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0235/stats/JULES-ES-1p0_P0235_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0238/stats/JULES-ES-1p0_P0238_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0251/stats/JULES-ES-1p0_P0251_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0259/stats/JULES-ES-1p0_P0259_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0285/stats/JULES-ES-1p0_P0285_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0357/stats/JULES-ES-1p0_P0357_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0376/stats/JULES-ES-1p0_P0376_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0387/stats/JULES-ES-1p0_P0387_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0394/stats/JULES-ES-1p0_P0394_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0405/stats/JULES-ES-1p0_P0405_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0424/stats/JULES-ES-1p0_P0424_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0455/stats/JULES-ES-1p0_P0455_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0457/stats/JULES-ES-1p0_P0457_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
fLuc_lnd_sum_ens <- makeTimeseriesEnsemble(variable = "fLuc_lnd_sum") / (1e12/ysec)
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0069/stats/JULES-ES-1p0_P0069_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0086/stats/JULES-ES-1p0_P0086_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0144/stats/JULES-ES-1p0_P0144_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0165/stats/JULES-ES-1p0_P0165_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0168/stats/JULES-ES-1p0_P0168_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0183/stats/JULES-ES-1p0_P0183_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0185/stats/JULES-ES-1p0_P0185_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0214/stats/JULES-ES-1p0_P0214_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0216/stats/JULES-ES-1p0_P0216_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0235/stats/JULES-ES-1p0_P0235_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0238/stats/JULES-ES-1p0_P0238_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0251/stats/JULES-ES-1p0_P0251_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0259/stats/JULES-ES-1p0_P0259_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0285/stats/JULES-ES-1p0_P0285_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0357/stats/JULES-ES-1p0_P0357_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0376/stats/JULES-ES-1p0_P0376_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0387/stats/JULES-ES-1p0_P0387_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0394/stats/JULES-ES-1p0_P0394_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0405/stats/JULES-ES-1p0_P0405_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0424/stats/JULES-ES-1p0_P0424_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0455/stats/JULES-ES-1p0_P0455_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0457/stats/JULES-ES-1p0_P0457_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
fHarvest_lnd_sum_ens <- makeTimeseriesEnsemble(variable = "fHarvest_lnd_sum") / (1e12/ysec)
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0069/stats/JULES-ES-1p0_P0069_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0086/stats/JULES-ES-1p0_P0086_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0144/stats/JULES-ES-1p0_P0144_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0165/stats/JULES-ES-1p0_P0165_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0168/stats/JULES-ES-1p0_P0168_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0183/stats/JULES-ES-1p0_P0183_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0185/stats/JULES-ES-1p0_P0185_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0214/stats/JULES-ES-1p0_P0214_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0216/stats/JULES-ES-1p0_P0216_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0235/stats/JULES-ES-1p0_P0235_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0238/stats/JULES-ES-1p0_P0238_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0251/stats/JULES-ES-1p0_P0251_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0259/stats/JULES-ES-1p0_P0259_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0285/stats/JULES-ES-1p0_P0285_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0357/stats/JULES-ES-1p0_P0357_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0376/stats/JULES-ES-1p0_P0376_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0387/stats/JULES-ES-1p0_P0387_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0394/stats/JULES-ES-1p0_P0394_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0405/stats/JULES-ES-1p0_P0405_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0424/stats/JULES-ES-1p0_P0424_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0455/stats/JULES-ES-1p0_P0455_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0457/stats/JULES-ES-1p0_P0457_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
# fractions
treeFrac_lnd_mean_ens <- makeTimeseriesEnsemble(variable = "treeFrac_lnd_mean")
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0069/stats/JULES-ES-1p0_P0069_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0086/stats/JULES-ES-1p0_P0086_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0144/stats/JULES-ES-1p0_P0144_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0165/stats/JULES-ES-1p0_P0165_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0168/stats/JULES-ES-1p0_P0168_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0183/stats/JULES-ES-1p0_P0183_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0185/stats/JULES-ES-1p0_P0185_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0214/stats/JULES-ES-1p0_P0214_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0216/stats/JULES-ES-1p0_P0216_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0235/stats/JULES-ES-1p0_P0235_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0238/stats/JULES-ES-1p0_P0238_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0251/stats/JULES-ES-1p0_P0251_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0259/stats/JULES-ES-1p0_P0259_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0285/stats/JULES-ES-1p0_P0285_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0357/stats/JULES-ES-1p0_P0357_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0376/stats/JULES-ES-1p0_P0376_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0387/stats/JULES-ES-1p0_P0387_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0394/stats/JULES-ES-1p0_P0394_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0405/stats/JULES-ES-1p0_P0405_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0424/stats/JULES-ES-1p0_P0424_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0455/stats/JULES-ES-1p0_P0455_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0457/stats/JULES-ES-1p0_P0457_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
shrubFrac_lnd_mean_ens <- makeTimeseriesEnsemble(variable = "shrubFrac_lnd_mean")
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0069/stats/JULES-ES-1p0_P0069_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0086/stats/JULES-ES-1p0_P0086_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0144/stats/JULES-ES-1p0_P0144_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0165/stats/JULES-ES-1p0_P0165_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0168/stats/JULES-ES-1p0_P0168_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0183/stats/JULES-ES-1p0_P0183_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0185/stats/JULES-ES-1p0_P0185_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0214/stats/JULES-ES-1p0_P0214_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0216/stats/JULES-ES-1p0_P0216_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0235/stats/JULES-ES-1p0_P0235_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0238/stats/JULES-ES-1p0_P0238_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0251/stats/JULES-ES-1p0_P0251_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0259/stats/JULES-ES-1p0_P0259_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0285/stats/JULES-ES-1p0_P0285_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0357/stats/JULES-ES-1p0_P0357_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0376/stats/JULES-ES-1p0_P0376_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0387/stats/JULES-ES-1p0_P0387_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0394/stats/JULES-ES-1p0_P0394_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0405/stats/JULES-ES-1p0_P0405_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0424/stats/JULES-ES-1p0_P0424_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0455/stats/JULES-ES-1p0_P0455_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0457/stats/JULES-ES-1p0_P0457_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
baresoilFrac_lnd_mean_ens <- makeTimeseriesEnsemble(variable = "baresoilFrac_lnd_mean")
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0069/stats/JULES-ES-1p0_P0069_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0086/stats/JULES-ES-1p0_P0086_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0144/stats/JULES-ES-1p0_P0144_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0165/stats/JULES-ES-1p0_P0165_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0168/stats/JULES-ES-1p0_P0168_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0183/stats/JULES-ES-1p0_P0183_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0185/stats/JULES-ES-1p0_P0185_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0214/stats/JULES-ES-1p0_P0214_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0216/stats/JULES-ES-1p0_P0216_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0235/stats/JULES-ES-1p0_P0235_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0238/stats/JULES-ES-1p0_P0238_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0251/stats/JULES-ES-1p0_P0251_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0259/stats/JULES-ES-1p0_P0259_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0285/stats/JULES-ES-1p0_P0285_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0357/stats/JULES-ES-1p0_P0357_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0376/stats/JULES-ES-1p0_P0376_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0387/stats/JULES-ES-1p0_P0387_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0394/stats/JULES-ES-1p0_P0394_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0405/stats/JULES-ES-1p0_P0405_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0424/stats/JULES-ES-1p0_P0424_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0455/stats/JULES-ES-1p0_P0455_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
Error in R_nc4_open: No such file or directory
Error in nc_open(paste0(fn)) :
Error in nc_open trying to open file /project/carbon_ppe/JULES-ES-1p0_PPE/P0457/stats/JULES-ES-1p0_P0457_Annual_global.nc
Error in R_nc4_inq_varndims: NetCDF: Not a valid ID
Error in ncvar_ndims(ncid, varid) : error returned from C call
Error in R_nc4_close: NetCDF: Not a valid ID
#c3PftFrac_lnd_mean_ens <- makeTimeseriesEnsemble(variable = "c3PftFrac_lnd_mean_ens")
#c4PftFrac_lnd_mean_ens <- makeTimeseriesEnsemble(variable = "c4PftFrac_lnd_mean_ens")
First, use mean NPP as an example. How does NPP respond to each parameter? NAs are removed, but zero values are still included.
p <- ncol(X_level0)
y_level0 <- Y_level0[,'npp_nlim_lnd_sum']
par(mfrow = c(5,7), mar = c(3,1,3,1), oma = c(1,1,5,1))
for(i in 1:p){
plot(X_level0[,i], y_level0, xlab = '', ylab = '', main = colnames(X_level0)[i])
}
mtext('NPP', outer = TRUE, side = 3, cex = 2, line = 2)
yanom_level0 <- YAnom_level0[,'npp_nlim_lnd_sum']
par(mfrow = c(5,7), mar = c(3,1,3,1), oma = c(1,1,5,1))
for(i in 1:p){
plot(X_level0[,i], yanom_level0, xlab = '', ylab = '', main = colnames(X_level0)[i])
}
mtext('NPP change over time', outer = TRUE, side = 3, cex = 2, line = 2)
Some outputs (e.g fLuc, fHarvest) have an almost perfect 1:1 relationship between modern value and change, some (nbp, npp, treeFrac) quite or moderately strong, and some (csoil, cveg) very weak or non-existant.
par(mfrow = c(4,7), mar = c(3,1,3,1), oma = c(4,5,1,1))
pdash <- ncol(Y_level0)
for(i in 1:pdash){
y_level0 <- Y_level0[,i]
yanom_level0 <- YAnom_level0[,i]
plot(y_level0, yanom_level0, xlab = '', ylab = '', main = colnames(Y_level0)[i])
}
mtext(text = 'Modern value', side = 1, line = 2, outer = TRUE, cex = 2)
mtext(text = 'Change', side = 2, line = 2, outer = TRUE, cex = 2)
It appears that this ensemble is less “clear cut” in having an output that clearly distinguishes between “failed” (or close to it), and “not failed”.
Having said that, having an F0 over a threshold seems to kill the carbon cycle, as before. Here, we’ve set a threshold of 0.9 (on the normalised scale) for F0, and we remove members of the ensemble with a larger F0 than that when we build emulators.
NA
NA
NA
NA
NA
The level 1 constraint removes any input with F0 greater than 0.9 (normalised), which removes many of the zero-carbon-cycle members up front. There are 424 ensmble members remaining.
This does constraint sequentially, which may not be a good idea.
tsAnomaly <- function(nc, variable, startix = 1:20, endix = 144:164){
# A basic function to read a variable and calculate the anomaly at the end of the run
dat <- ncvar_get(nc, variable)
endMean <- mean(dat[endix])
startMean <- mean(dat[startix])
out <- endMean - startMean
out
}
tsAnomaly(nc = nc, variable = "npp_nlim_lnd_mean")
[1] 2.410932e-09
par(mfrow = c(4, 8), mar = c(4,3,2,1))
for(i in 1:d){
hist(X_nlevel0[,i], xlim = c(0,1), breaks = seq(from=0, to = 1, by = 0.1), col = 'grey', main = '', ylim = c(0,9),
border = 'white', xlab = colnames(X_nlevel0)[i], ylab = '', las = 1, cex.lab = 1.5)
}
# Plot the regular km emulator. Doesn’t look great.
plot(em_npp_level0)
plot(em_npp_level1)
par(mfrow = c(2,1))
plot(lhs$f0_io, datmat[, 'npp_nlim_lnd_sum'], main = 'Multiplication factor', xlab = 'f0_io', ylab = 'NPP sum')
plot(X_level0[,'f0_io'], Y_level0[, 'npp_nlim_lnd_sum'], xlab = 'f0_io', main = 'Normalized', ylab = 'NPP sum')
abline(v = 0.9)
em_npp_level0 <- km(~., design = X_level0, response = y_level0)
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~alpha_io + a_wl_io + bio_hum_cn + b_wl_io + dcatch_dlai_io +
dqcrit_io + dz0v_dh_io + f0_io + fd_io + g_area_io + g_root_io +
g_wood_io + gs_nvg_io + hw_sw_io + kaps_roth + knl_io + lai_max_io +
lai_min_io + lma_io + n_inorg_turnover + nmass_io + nr_io +
retran_l_io + retran_r_io + r_grow_io + rootd_ft_io + sigl_io +
sorp + tleaf_of_io + tlow_io + tupp_io + l_vg_soil
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 2 2 2 2 1.998154 1.997409 2 2 2 2 2 2 2 2 2 1.999201 2 1.996693 2 2 2 2 2 2 1.995643 1.998832 2 2 2 2
- best initial criterion value(s) : -1843.987
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 1844 |proj g|= 1.8323
At iterate 1 f = 1841 |proj g|= 1.932
At iterate 2 f = 1832.2 |proj g|= 1.7965
ys=-1.126e+00 -gs= 8.291e+00, BFGS update SKIPPED
At iterate 3 f = 1824.5 |proj g|= 1.7302
At iterate 4 f = 1817.2 |proj g|= 1.6877
At iterate 5 f = 1815.1 |proj g|= 1.9246
At iterate 6 f = 1812.3 |proj g|= 1.6337
At iterate 7 f = 1811.5 |proj g|= 1.6161
At iterate 8 f = 1808.8 |proj g|= 1.8958
At iterate 9 f = 1806.3 |proj g|= 1.8748
At iterate 10 f = 1802.3 |proj g|= 1.6391
At iterate 11 f = 1801.5 |proj g|= 1.5917
At iterate 12 f = 1799.8 |proj g|= 1.8831
At iterate 13 f = 1798.4 |proj g|= 1.2511
At iterate 14 f = 1797.5 |proj g|= 1.4136
At iterate 15 f = 1796.5 |proj g|= 1.5017
At iterate 16 f = 1796.1 |proj g|= 1.4701
At iterate 17 f = 1795 |proj g|= 1.8869
At iterate 18 f = 1795 |proj g|= 1.7583
At iterate 19 f = 1794.8 |proj g|= 1.7511
At iterate 20 f = 1794.6 |proj g|= 1.8834
At iterate 21 f = 1794.3 |proj g|= 1.8902
At iterate 22 f = 1793.4 |proj g|= 1.9002
At iterate 23 f = 1793.1 |proj g|= 1.8917
At iterate 24 f = 1792.8 |proj g|= 1.465
At iterate 25 f = 1792.6 |proj g|= 1.3879
At iterate 26 f = 1792.1 |proj g|= 1.811
At iterate 27 f = 1791.6 |proj g|= 1.8062
At iterate 28 f = 1791.3 |proj g|= 1.7986
At iterate 29 f = 1791.2 |proj g|= 1.5415
At iterate 30 f = 1791.1 |proj g|= 1.5681
At iterate 31 f = 1791 |proj g|= 1.1798
At iterate 32 f = 1791 |proj g|= 1.177
At iterate 33 f = 1791 |proj g|= 1.1717
At iterate 34 f = 1791 |proj g|= 1.1686
At iterate 35 f = 1790.9 |proj g|= 1.161
At iterate 36 f = 1790.4 |proj g|= 1.8051
At iterate 37 f = 1790.3 |proj g|= 1.7958
At iterate 38 f = 1790.2 |proj g|= 0.99558
At iterate 39 f = 1790.2 |proj g|= 1.8831
At iterate 40 f = 1790.1 |proj g|= 1.8842
At iterate 41 f = 1789.9 |proj g|= 1.8844
At iterate 42 f = 1789.8 |proj g|= 1.883
At iterate 43 f = 1789.7 |proj g|= 0.85804
At iterate 44 f = 1789.7 |proj g|= 1.2313
At iterate 45 f = 1789.7 |proj g|= 1.7874
At iterate 46 f = 1789.6 |proj g|= 1.7903
At iterate 47 f = 1789.5 |proj g|= 1.7899
At iterate 48 f = 1789.5 |proj g|= 1.7855
At iterate 49 f = 1789.4 |proj g|= 1.6657
At iterate 50 f = 1789.4 |proj g|= 1.4186
At iterate 51 f = 1789.4 |proj g|= 1.8803
At iterate 52 f = 1789.3 |proj g|= 0.73343
At iterate 53 f = 1789.2 |proj g|= 0.79817
At iterate 54 f = 1789.1 |proj g|= 1.7907
At iterate 55 f = 1789.1 |proj g|= 1.4231
At iterate 56 f = 1789 |proj g|= 1.4874
At iterate 57 f = 1789 |proj g|= 1.3247
At iterate 58 f = 1788.9 |proj g|= 1.8776
At iterate 59 f = 1788.8 |proj g|= 0.58767
At iterate 60 f = 1788.8 |proj g|= 0.63545
At iterate 61 f = 1788.8 |proj g|= 0.71919
At iterate 62 f = 1788.8 |proj g|= 0.73157
At iterate 63 f = 1788.8 |proj g|= 0.70156
At iterate 64 f = 1788.8 |proj g|= 0.66511
At iterate 65 f = 1788.7 |proj g|= 0.54998
At iterate 66 f = 1788.7 |proj g|= 1.8757
At iterate 67 f = 1788.7 |proj g|= 0.63942
At iterate 68 f = 1788.7 |proj g|= 0.6508
At iterate 69 f = 1788.7 |proj g|= 0.54948
At iterate 70 f = 1788.7 |proj g|= 0.41199
At iterate 71 f = 1788.7 |proj g|= 0.2168
At iterate 72 f = 1788.7 |proj g|= 0.21574
At iterate 73 f = 1788.7 |proj g|= 0.38684
At iterate 74 f = 1788.7 |proj g|= 0.47402
At iterate 75 f = 1788.7 |proj g|= 0.45564
At iterate 76 f = 1788.7 |proj g|= 1.8721
At iterate 77 f = 1788.7 |proj g|= 0.39459
At iterate 78 f = 1788.7 |proj g|= 0.26428
At iterate 79 f = 1788.7 |proj g|= 0.34423
At iterate 80 f = 1788.7 |proj g|= 0.24843
At iterate 81 f = 1788.7 |proj g|= 0.15055
At iterate 82 f = 1788.7 |proj g|= 0.21405
At iterate 83 f = 1788.7 |proj g|= 0.074636
At iterate 84 f = 1788.7 |proj g|= 0.053125
At iterate 85 f = 1788.7 |proj g|= 0.13013
At iterate 86 f = 1788.7 |proj g|= 0.10912
At iterate 87 f = 1788.7 |proj g|= 0.097971
At iterate 88 f = 1788.7 |proj g|= 0.056177
At iterate 89 f = 1788.7 |proj g|= 0.032267
At iterate 90 f = 1788.7 |proj g|= 0.01778
iterations 90
function evaluations 102
segments explored during Cauchy searches 96
BFGS updates skipped 1
active bounds at final generalized Cauchy point 23
norm of the final projected gradient 0.0177803
final function value 1788.68
F = 1788.68
final value 1788.679293
converged
em_npp_level1 <- km(~., design = X_level1, response = y_level1)
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~alpha_io + a_wl_io + bio_hum_cn + b_wl_io + dcatch_dlai_io +
dqcrit_io + dz0v_dh_io + f0_io + fd_io + g_area_io + g_root_io +
g_wood_io + gs_nvg_io + hw_sw_io + kaps_roth + knl_io + lai_max_io +
lai_min_io + lma_io + n_inorg_turnover + nmass_io + nr_io +
retran_l_io + retran_r_io + r_grow_io + rootd_ft_io + sigl_io +
sorp + tleaf_of_io + tlow_io + tupp_io + l_vg_soil
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 2 1.995574 2 1.998154 1.790352 2 2 2 1.998084 2 2 2 2 2 1.999201 2 1.996693 1.998361 2 2 1.995738 2 1.993455 1.995643 1.998832 2 2 2 2
- best initial criterion value(s) : -6188.61
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 6188.6 |proj g|= 1.5726
At iterate 1 f = 6136.6 |proj g|= 1.7711
At iterate 2 f = 6124.5 |proj g|= 1.7375
At iterate 3 f = 6102.1 |proj g|= 1.54
At iterate 4 f = 6095.6 |proj g|= 1.926
At iterate 5 f = 6083.4 |proj g|= 1.166
At iterate 6 f = 6080.3 |proj g|= 1.1634
At iterate 7 f = 6076.7 |proj g|= 1.9021
At iterate 8 f = 6075.2 |proj g|= 1.911
At iterate 9 f = 6071.8 |proj g|= 1.9055
At iterate 10 f = 6064.3 |proj g|= 1.8912
At iterate 11 f = 6058.3 |proj g|= 1.2244
At iterate 12 f = 6058 |proj g|= 1.8887
At iterate 13 f = 6057.6 |proj g|= 1.894
At iterate 14 f = 6057.3 |proj g|= 1.8919
At iterate 15 f = 6057 |proj g|= 1.2244
At iterate 16 f = 6056.7 |proj g|= 1.2211
At iterate 17 f = 6055.4 |proj g|= 1.8931
At iterate 18 f = 6055.2 |proj g|= 1.8889
At iterate 19 f = 6054.8 |proj g|= 1.4117
At iterate 20 f = 6054.4 |proj g|= 1.414
At iterate 21 f = 6053.9 |proj g|= 1.8913
At iterate 22 f = 6053.6 |proj g|= 1.891
At iterate 23 f = 6053.2 |proj g|= 1.3425
At iterate 24 f = 6053 |proj g|= 1.3385
At iterate 25 f = 6052.8 |proj g|= 1.2233
At iterate 26 f = 6052.3 |proj g|= 1.8881
At iterate 27 f = 6052.3 |proj g|= 1.0774
At iterate 28 f = 6052.2 |proj g|= 1.0671
At iterate 29 f = 6052 |proj g|= 1.0482
At iterate 30 f = 6052 |proj g|= 1.0454
At iterate 31 f = 6051.9 |proj g|= 1.8877
At iterate 32 f = 6051.9 |proj g|= 1.8888
At iterate 33 f = 6051.9 |proj g|= 1.8864
At iterate 34 f = 6051.9 |proj g|= 0.90575
At iterate 35 f = 6051.9 |proj g|= 0.89448
At iterate 36 f = 6051.8 |proj g|= 0.74631
At iterate 37 f = 6051.8 |proj g|= 1.0388
At iterate 38 f = 6051.8 |proj g|= 1.3283
At iterate 39 f = 6051.7 |proj g|= 1.3266
At iterate 40 f = 6051.7 |proj g|= 1.8848
At iterate 41 f = 6051.7 |proj g|= 1.885
At iterate 42 f = 6051.7 |proj g|= 0.96601
At iterate 43 f = 6051.7 |proj g|= 0.15359
At iterate 44 f = 6051.7 |proj g|= 0.10377
At iterate 45 f = 6051.7 |proj g|= 0.1167
At iterate 46 f = 6051.7 |proj g|= 0.1168
At iterate 47 f = 6051.7 |proj g|= 0.11688
At iterate 48 f = 6051.7 |proj g|= 0.11685
At iterate 49 f = 6051.7 |proj g|= 0.1166
At iterate 50 f = 6051.7 |proj g|= 0.10972
At iterate 51 f = 6051.7 |proj g|= 0.16533
At iterate 52 f = 6051.7 |proj g|= 0.080658
At iterate 53 f = 6051.7 |proj g|= 0.36174
At iterate 54 f = 6051.7 |proj g|= 0.18435
At iterate 55 f = 6051.7 |proj g|= 0.11674
At iterate 56 f = 6051.7 |proj g|= 0.11677
At iterate 57 f = 6051.7 |proj g|= 0.10698
At iterate 58 f = 6051.7 |proj g|= 0.072612
At iterate 59 f = 6051.7 |proj g|= 0.043645
iterations 59
function evaluations 74
segments explored during Cauchy searches 83
BFGS updates skipped 0
active bounds at final generalized Cauchy point 25
norm of the final projected gradient 0.0436446
final function value 6051.72
F = 6051.72
final value 6051.720329
converged
em_npp_level0_ms <- km(~., design = X_level0, response = y_level0, multistart = 4)
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~alpha_io + a_wl_io + bio_hum_cn + b_wl_io + dcatch_dlai_io +
dqcrit_io + dz0v_dh_io + f0_io + fd_io + g_area_io + g_root_io +
g_wood_io + gs_nvg_io + hw_sw_io + kaps_roth + knl_io + lai_max_io +
lai_min_io + lma_io + n_inorg_turnover + nmass_io + nr_io +
retran_l_io + retran_r_io + r_grow_io + rootd_ft_io + sigl_io +
sorp + tleaf_of_io + tlow_io + tupp_io + l_vg_soil
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 2 2 2 2 1.998154 1.997409 2 2 2 2 2 2 2 2 2 1.999201 2 1.996693 2 2 2 2 2 2 1.995643 1.998832 2 2 2 2
- best initial criterion value(s) : -1840.591 -1841.288 -1844.501 -1844.688
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 1840.6 |proj g|= 1.8992
At iterate 1 f = 1835 |proj g|= 1.2966
At iterate 2 f = 1816.9 |proj g|= 1.8857
At iterate 3 f = 1811.1 |proj g|= 1.8535
At iterate 4 f = 1809.7 |proj g|= 1.8579
At iterate 5 f = 1806.4 |proj g|= 1.5074
At iterate 6 f = 1803.8 |proj g|= 1.8429
At iterate 7 f = 1802.8 |proj g|= 1.9053
At iterate 8 f = 1801.6 |proj g|= 1.4553
At iterate 9 f = 1801.3 |proj g|= 1.8287
At iterate 10 f = 1801 |proj g|= 1.8331
At iterate 11 f = 1799.5 |proj g|= 1.901
At iterate 12 f = 1798.6 |proj g|= 1.8816
At iterate 13 f = 1797.8 |proj g|= 1.821
At iterate 14 f = 1797 |proj g|= 1.3049
At iterate 15 f = 1794.4 |proj g|= 1.2057
At iterate 16 f = 1792.6 |proj g|= 1.5052
At iterate 17 f = 1791.6 |proj g|= 1.0431
At iterate 18 f = 1791.2 |proj g|= 1.0204
At iterate 19 f = 1791.1 |proj g|= 1.8728
At iterate 20 f = 1790.9 |proj g|= 1.873
At iterate 21 f = 1790.6 |proj g|= 1.8719
At iterate 22 f = 1790.5 |proj g|= 0.89679
At iterate 23 f = 1790.1 |proj g|= 0.82839
At iterate 24 f = 1789.9 |proj g|= 0.77349
At iterate 25 f = 1789.8 |proj g|= 0.99629
At iterate 26 f = 1789.7 |proj g|= 0.98579
At iterate 27 f = 1789.6 |proj g|= 1.7918
At iterate 28 f = 1789.5 |proj g|= 1.8717
At iterate 29 f = 1789.4 |proj g|= 1.351
At iterate 30 f = 1789.4 |proj g|= 1.2383
At iterate 31 f = 1789.3 |proj g|= 0.63725
At iterate 32 f = 1789.3 |proj g|= 0.63573
At iterate 33 f = 1789.3 |proj g|= 1.2897
At iterate 34 f = 1789.2 |proj g|= 1.3752
At iterate 35 f = 1789.2 |proj g|= 0.96652
At iterate 36 f = 1789.2 |proj g|= 0.6074
At iterate 37 f = 1789.1 |proj g|= 1.8729
At iterate 38 f = 1789 |proj g|= 1.3413
At iterate 39 f = 1789 |proj g|= 0.80837
At iterate 40 f = 1789 |proj g|= 0.78971
At iterate 41 f = 1788.9 |proj g|= 1.7915
At iterate 42 f = 1788.9 |proj g|= 0.74545
At iterate 43 f = 1788.8 |proj g|= 0.97496
At iterate 44 f = 1788.8 |proj g|= 1.8736
At iterate 45 f = 1788.8 |proj g|= 1.8731
At iterate 46 f = 1788.8 |proj g|= 0.49609
At iterate 47 f = 1788.8 |proj g|= 0.26876
At iterate 48 f = 1788.8 |proj g|= 0.43455
At iterate 49 f = 1788.8 |proj g|= 0.26835
At iterate 50 f = 1788.7 |proj g|= 1.3025
At iterate 51 f = 1788.7 |proj g|= 1.2469
At iterate 52 f = 1788.7 |proj g|= 0.64801
At iterate 53 f = 1788.7 |proj g|= 0.62234
At iterate 54 f = 1788.7 |proj g|= 0.98733
At iterate 55 f = 1788.7 |proj g|= 1.8724
At iterate 56 f = 1788.7 |proj g|= 0.18666
At iterate 57 f = 1788.7 |proj g|= 0.18511
At iterate 58 f = 1788.7 |proj g|= 0.21428
At iterate 59 f = 1788.7 |proj g|= 0.34715
At iterate 60 f = 1788.7 |proj g|= 0.18831
At iterate 61 f = 1788.7 |proj g|= 0.19901
At iterate 62 f = 1788.7 |proj g|= 1.2457
At iterate 63 f = 1788.7 |proj g|= 0.94195
At iterate 64 f = 1788.7 |proj g|= 0.42348
At iterate 65 f = 1788.7 |proj g|= 0.45832
At iterate 66 f = 1788.7 |proj g|= 0.30748
At iterate 67 f = 1788.7 |proj g|= 0.25212
At iterate 68 f = 1788.7 |proj g|= 1.0108
At iterate 69 f = 1788.7 |proj g|= 0.62535
At iterate 70 f = 1788.7 |proj g|= 0.3723
At iterate 71 f = 1788.7 |proj g|= 0.33613
At iterate 72 f = 1788.7 |proj g|= 0.19115
At iterate 73 f = 1788.7 |proj g|= 0.60743
At iterate 74 f = 1788.7 |proj g|= 0.16251
At iterate 75 f = 1788.7 |proj g|= 0.1533
At iterate 76 f = 1788.7 |proj g|= 0.21438
At iterate 77 f = 1788.7 |proj g|= 0.21472
At iterate 78 f = 1788.7 |proj g|= 0.13117
At iterate 79 f = 1788.7 |proj g|= 0.1301
At iterate 80 f = 1788.7 |proj g|= 0.036691
At iterate 81 f = 1788.7 |proj g|= 0.029554
At iterate 82 f = 1788.7 |proj g|= 0.051634
At iterate 83 f = 1788.7 |proj g|= 0.019406
At iterate 84 f = 1788.7 |proj g|= 0.034472
At iterate 85 f = 1788.7 |proj g|= 0.060315
At iterate 86 f = 1788.7 |proj g|= 0.032831
At iterate 87 f = 1788.7 |proj g|= 0.02779
At iterate 88 f = 1788.7 |proj g|= 0.02737
At iterate 89 f = 1788.7 |proj g|= 0.026581
At iterate 90 f = 1788.7 |proj g|= 0.013492
At iterate 91 f = 1788.7 |proj g|= 0.056896
iterations 91
function evaluations 108
segments explored during Cauchy searches 104
BFGS updates skipped 0
active bounds at final generalized Cauchy point 23
norm of the final projected gradient 0.0568956
final function value 1788.68
F = 1788.68
final value 1788.679218
converged
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 1841.3 |proj g|= 1.8457
At iterate 1 f = 1827.2 |proj g|= 1.6626
At iterate 2 f = 1816.7 |proj g|= 1.6416
At iterate 3 f = 1813.6 |proj g|= 1.9367
At iterate 4 f = 1810.3 |proj g|= 1.4239
At iterate 5 f = 1807.8 |proj g|= 1.2668
At iterate 6 f = 1807.1 |proj g|= 1.9467
At iterate 7 f = 1806.3 |proj g|= 1.9301
At iterate 8 f = 1805.6 |proj g|= 1.4101
At iterate 9 f = 1805.2 |proj g|= 1.9325
At iterate 10 f = 1803.9 |proj g|= 1.9366
At iterate 11 f = 1800.9 |proj g|= 1.9409
At iterate 12 f = 1798.7 |proj g|= 1.9434
At iterate 13 f = 1798.4 |proj g|= 1.4098
At iterate 14 f = 1798.2 |proj g|= 1.3564
At iterate 15 f = 1798 |proj g|= 1.9417
At iterate 16 f = 1797.7 |proj g|= 1.6288
At iterate 17 f = 1796.7 |proj g|= 1.6209
At iterate 18 f = 1796.4 |proj g|= 1.936
At iterate 19 f = 1796.2 |proj g|= 1.1364
At iterate 20 f = 1795.6 |proj g|= 1.9343
At iterate 21 f = 1795.5 |proj g|= 1.4662
At iterate 22 f = 1795.3 |proj g|= 1.4608
At iterate 23 f = 1795.2 |proj g|= 1.9279
At iterate 24 f = 1795.1 |proj g|= 1.9304
At iterate 25 f = 1794.7 |proj g|= 1.9296
At iterate 26 f = 1794.7 |proj g|= 1.1735
At iterate 27 f = 1794.6 |proj g|= 1.1729
At iterate 28 f = 1794.6 |proj g|= 1.9274
At iterate 29 f = 1794.5 |proj g|= 1.9304
At iterate 30 f = 1794.4 |proj g|= 1.928
At iterate 31 f = 1794.4 |proj g|= 1.3428
At iterate 32 f = 1794.3 |proj g|= 1.2814
At iterate 33 f = 1794.3 |proj g|= 1.333
At iterate 34 f = 1794.3 |proj g|= 1.8995
At iterate 35 f = 1794.2 |proj g|= 1.9282
At iterate 36 f = 1794.1 |proj g|= 1.9307
At iterate 37 f = 1794 |proj g|= 1.9337
At iterate 38 f = 1794 |proj g|= 1.9301
At iterate 39 f = 1794 |proj g|= 0.83376
At iterate 40 f = 1793.9 |proj g|= 1.118
At iterate 41 f = 1793.9 |proj g|= 1.5683
At iterate 42 f = 1793.8 |proj g|= 1.5621
At iterate 43 f = 1793.8 |proj g|= 1.7678
At iterate 44 f = 1793.8 |proj g|= 1.928
At iterate 45 f = 1793.7 |proj g|= 1.9245
At iterate 46 f = 1793.7 |proj g|= 0.67906
At iterate 47 f = 1793.6 |proj g|= 0.53324
At iterate 48 f = 1793.6 |proj g|= 0.57473
At iterate 49 f = 1793.6 |proj g|= 0.33061
At iterate 50 f = 1793.6 |proj g|= 0.341
At iterate 51 f = 1793.6 |proj g|= 0.33962
At iterate 52 f = 1793.6 |proj g|= 0.3354
At iterate 53 f = 1793.6 |proj g|= 1.0482
At iterate 54 f = 1793.6 |proj g|= 1.7734
At iterate 55 f = 1793.6 |proj g|= 1.1694
At iterate 56 f = 1793.6 |proj g|= 0.28385
At iterate 57 f = 1793.6 |proj g|= 0.26585
At iterate 58 f = 1793.6 |proj g|= 0.21526
At iterate 59 f = 1793.6 |proj g|= 1.1788
At iterate 60 f = 1793.5 |proj g|= 1.0127
At iterate 61 f = 1793.5 |proj g|= 1.9242
At iterate 62 f = 1793.5 |proj g|= 0.38946
At iterate 63 f = 1793.5 |proj g|= 0.27952
At iterate 64 f = 1793.5 |proj g|= 0.24949
At iterate 65 f = 1793.5 |proj g|= 0.23862
At iterate 66 f = 1793.5 |proj g|= 0.78538
At iterate 67 f = 1793.5 |proj g|= 1.0766
At iterate 68 f = 1793.5 |proj g|= 0.76839
At iterate 69 f = 1793.5 |proj g|= 0.76669
At iterate 70 f = 1793.5 |proj g|= 1.9245
At iterate 71 f = 1793.5 |proj g|= 0.33263
At iterate 72 f = 1793.5 |proj g|= 0.1577
At iterate 73 f = 1793.5 |proj g|= 0.13078
At iterate 74 f = 1793.5 |proj g|= 0.12306
At iterate 75 f = 1793.5 |proj g|= 0.24376
At iterate 76 f = 1793.5 |proj g|= 0.30017
At iterate 77 f = 1793.5 |proj g|= 1.925
At iterate 78 f = 1793.5 |proj g|= 0.41291
At iterate 79 f = 1793.5 |proj g|= 0.36346
At iterate 80 f = 1793.5 |proj g|= 0.2116
At iterate 81 f = 1793.5 |proj g|= 0.094817
At iterate 82 f = 1793.5 |proj g|= 0.22363
At iterate 83 f = 1793.5 |proj g|= 0.29526
At iterate 84 f = 1793.5 |proj g|= 1.438
At iterate 85 f = 1793.5 |proj g|= 0.56409
At iterate 86 f = 1793.5 |proj g|= 0.077891
At iterate 87 f = 1793.5 |proj g|= 0.07784
At iterate 88 f = 1793.5 |proj g|= 0.028125
At iterate 89 f = 1793.5 |proj g|= 0.11856
At iterate 90 f = 1793.5 |proj g|= 0.14496
At iterate 91 f = 1793.5 |proj g|= 0.077867
At iterate 92 f = 1793.5 |proj g|= 0.077847
At iterate 93 f = 1793.5 |proj g|= 0.046362
At iterate 94 f = 1793.5 |proj g|= 0.03285
At iterate 95 f = 1793.5 |proj g|= 0.067001
At iterate 96 f = 1793.5 |proj g|= 0.077832
At iterate 97 f = 1793.5 |proj g|= 0.36176
At iterate 98 f = 1793.5 |proj g|= 0.028811
At iterate 99 f = 1793.5 |proj g|= 0.028298
At iterate 100 f = 1793.5 |proj g|= 0.077859
At iterate 101 f = 1793.5 |proj g|= 0.077922
final value 1793.489261
stopped after 101 iterations
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 1844.5 |proj g|= 1.9446
At iterate 1 f = 1838.6 |proj g|= 1.6664
At iterate 2 f = 1821.5 |proj g|= 1.7352
At iterate 3 f = 1820 |proj g|= 1.949
At iterate 4 f = 1819.2 |proj g|= 1.6826
At iterate 5 f = 1817.9 |proj g|= 1.9038
At iterate 6 f = 1812.3 |proj g|= 1.4576
At iterate 7 f = 1806.2 |proj g|= 1.5271
At iterate 8 f = 1801.4 |proj g|= 1.9037
At iterate 9 f = 1800.2 |proj g|= 1.3158
At iterate 10 f = 1798.1 |proj g|= 1.2803
At iterate 11 f = 1797.5 |proj g|= 1.5149
At iterate 12 f = 1797.3 |proj g|= 1.8988
At iterate 13 f = 1797.1 |proj g|= 1.9054
At iterate 14 f = 1796.8 |proj g|= 1.913
At iterate 15 f = 1796.6 |proj g|= 1.9057
At iterate 16 f = 1796.3 |proj g|= 0.93391
At iterate 17 f = 1796.1 |proj g|= 0.9221
At iterate 18 f = 1795.8 |proj g|= 0.92711
At iterate 19 f = 1795.4 |proj g|= 1.8023
At iterate 20 f = 1795.4 |proj g|= 0.9197
At iterate 21 f = 1794.9 |proj g|= 1.8928
At iterate 22 f = 1794.9 |proj g|= 1.4632
At iterate 23 f = 1794.8 |proj g|= 1.4761
At iterate 24 f = 1794.7 |proj g|= 1.4636
At iterate 25 f = 1794.5 |proj g|= 1.4457
At iterate 26 f = 1794.2 |proj g|= 1.1544
At iterate 27 f = 1793.8 |proj g|= 1.7338
At iterate 28 f = 1793.5 |proj g|= 1.1692
At iterate 29 f = 1793.1 |proj g|= 1.8803
At iterate 30 f = 1792.5 |proj g|= 1.884
At iterate 31 f = 1792.4 |proj g|= 0.90038
At iterate 32 f = 1792 |proj g|= 1.7769
At iterate 33 f = 1791.9 |proj g|= 1.7735
At iterate 34 f = 1791.8 |proj g|= 1.8782
At iterate 35 f = 1791.6 |proj g|= 1.6841
At iterate 36 f = 1791.4 |proj g|= 0.83758
At iterate 37 f = 1791.1 |proj g|= 1.5247
At iterate 38 f = 1790.7 |proj g|= 1.4688
At iterate 39 f = 1790.6 |proj g|= 1.8823
At iterate 40 f = 1790.5 |proj g|= 0.89849
At iterate 41 f = 1790.4 |proj g|= 0.78778
At iterate 42 f = 1790.3 |proj g|= 0.78753
At iterate 43 f = 1790.1 |proj g|= 0.77988
At iterate 44 f = 1790.1 |proj g|= 0.77729
At iterate 45 f = 1790 |proj g|= 1.8799
At iterate 46 f = 1789.9 |proj g|= 1.7973
At iterate 47 f = 1789.9 |proj g|= 0.74416
At iterate 48 f = 1789.9 |proj g|= 0.73328
At iterate 49 f = 1789.8 |proj g|= 0.68398
At iterate 50 f = 1789.8 |proj g|= 1.307
At iterate 51 f = 1789.7 |proj g|= 1.3738
At iterate 52 f = 1789.7 |proj g|= 1.8109
At iterate 53 f = 1789.6 |proj g|= 1.3815
At iterate 54 f = 1789.6 |proj g|= 0.87545
At iterate 55 f = 1789.6 |proj g|= 1.1439
At iterate 56 f = 1789.4 |proj g|= 1.7894
At iterate 57 f = 1789.3 |proj g|= 1.7905
At iterate 58 f = 1789.3 |proj g|= 1.7929
At iterate 59 f = 1789.2 |proj g|= 1.8176
At iterate 60 f = 1789.1 |proj g|= 1.2114
At iterate 61 f = 1789.1 |proj g|= 1.1936
At iterate 62 f = 1788.9 |proj g|= 0.69571
At iterate 63 f = 1788.9 |proj g|= 1.872
At iterate 64 f = 1788.9 |proj g|= 0.73078
At iterate 65 f = 1788.9 |proj g|= 0.39127
At iterate 66 f = 1788.8 |proj g|= 0.84503
At iterate 67 f = 1788.8 |proj g|= 0.91146
At iterate 68 f = 1788.8 |proj g|= 0.4274
At iterate 69 f = 1788.8 |proj g|= 0.71837
At iterate 70 f = 1788.8 |proj g|= 0.88538
At iterate 71 f = 1788.8 |proj g|= 1.0321
At iterate 72 f = 1788.8 |proj g|= 0.53917
At iterate 73 f = 1788.8 |proj g|= 0.3419
At iterate 74 f = 1788.8 |proj g|= 0.3284
At iterate 75 f = 1788.8 |proj g|= 1.1285
At iterate 76 f = 1788.7 |proj g|= 0.61006
At iterate 77 f = 1788.7 |proj g|= 0.55693
At iterate 78 f = 1788.7 |proj g|= 0.85636
At iterate 79 f = 1788.7 |proj g|= 0.72264
At iterate 80 f = 1788.7 |proj g|= 0.39223
At iterate 81 f = 1788.7 |proj g|= 0.43084
At iterate 82 f = 1788.7 |proj g|= 0.33353
At iterate 83 f = 1788.7 |proj g|= 0.50591
At iterate 84 f = 1788.7 |proj g|= 0.36084
At iterate 85 f = 1788.7 |proj g|= 1.1291
At iterate 86 f = 1788.7 |proj g|= 0.42898
At iterate 87 f = 1788.7 |proj g|= 0.49812
At iterate 88 f = 1788.7 |proj g|= 0.38222
At iterate 89 f = 1788.7 |proj g|= 1.1761
At iterate 90 f = 1788.7 |proj g|= 0.13046
At iterate 91 f = 1788.7 |proj g|= 0.070866
At iterate 92 f = 1788.7 |proj g|= 0.049785
At iterate 93 f = 1788.7 |proj g|= 0.048225
At iterate 94 f = 1788.7 |proj g|= 0.13035
At iterate 95 f = 1788.7 |proj g|= 0.11851
At iterate 96 f = 1788.7 |proj g|= 0.16182
At iterate 97 f = 1788.7 |proj g|= 0.13024
At iterate 98 f = 1788.7 |proj g|= 0.05292
At iterate 99 f = 1788.7 |proj g|= 0.035912
At iterate 100 f = 1788.7 |proj g|= 0.03584
At iterate 101 f = 1788.7 |proj g|= 0.051226
final value 1788.680281
stopped after 101 iterations
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 1844.7 |proj g|= 1.4672
At iterate 1 f = 1843.4 |proj g|= 1.968
At iterate 2 f = 1843.3 |proj g|= 1.8974
At iterate 3 f = 1842.6 |proj g|= 1.8426
At iterate 4 f = 1842.4 |proj g|= 1.1256
At iterate 5 f = 1842.2 |proj g|= 1.2435
At iterate 6 f = 1841.4 |proj g|= 1.9443
At iterate 7 f = 1841.1 |proj g|= 1.9516
At iterate 8 f = 1840.9 |proj g|= 1.6975
At iterate 9 f = 1840.8 |proj g|= 1.6862
At iterate 10 f = 1840.5 |proj g|= 1.9332
At iterate 11 f = 1840 |proj g|= 1.9268
At iterate 12 f = 1839.9 |proj g|= 0.9055
At iterate 13 f = 1839.7 |proj g|= 0.80229
At iterate 14 f = 1839.2 |proj g|= 1.7009
At iterate 15 f = 1839 |proj g|= 1.1931
At iterate 16 f = 1838.5 |proj g|= 1.1808
At iterate 17 f = 1838.1 |proj g|= 1.1838
At iterate 18 f = 1837.4 |proj g|= 1.9211
At iterate 19 f = 1837.4 |proj g|= 1.9225
At iterate 20 f = 1836.9 |proj g|= 1.9243
At iterate 21 f = 1836.6 |proj g|= 1.9223
At iterate 22 f = 1836.3 |proj g|= 1.9186
At iterate 23 f = 1836.1 |proj g|= 1.6348
At iterate 24 f = 1836 |proj g|= 1.1876
At iterate 25 f = 1834 |proj g|= 1.8623
ys=-2.675e+00 -gs= 1.141e+00, BFGS update SKIPPED
At iterate 26 f = 1823.9 |proj g|= 1.875
At iterate 27 f = 1823.5 |proj g|= 1.9059
At iterate 28 f = 1817.7 |proj g|= 1.9357
At iterate 29 f = 1816.6 |proj g|= 1.5494
At iterate 30 f = 1813.6 |proj g|= 1.4506
At iterate 31 f = 1807.9 |proj g|= 1.9079
At iterate 32 f = 1802.6 |proj g|= 1.9133
At iterate 33 f = 1801.2 |proj g|= 1.6175
At iterate 34 f = 1799.3 |proj g|= 1.6117
At iterate 35 f = 1799 |proj g|= 1.9328
At iterate 36 f = 1798.9 |proj g|= 1.585
At iterate 37 f = 1798.6 |proj g|= 1.9232
At iterate 38 f = 1798.5 |proj g|= 1.5529
At iterate 39 f = 1798.2 |proj g|= 1.3371
At iterate 40 f = 1797.7 |proj g|= 1.2875
At iterate 41 f = 1796.7 |proj g|= 1.908
At iterate 42 f = 1796.2 |proj g|= 1.9162
At iterate 43 f = 1795.7 |proj g|= 0.69953
At iterate 44 f = 1795.7 |proj g|= 0.76777
At iterate 45 f = 1795.5 |proj g|= 0.84032
At iterate 46 f = 1795.3 |proj g|= 0.93548
At iterate 47 f = 1795.3 |proj g|= 0.62274
At iterate 48 f = 1795.3 |proj g|= 0.62061
At iterate 49 f = 1795.2 |proj g|= 1.9126
At iterate 50 f = 1795.1 |proj g|= 1.9137
At iterate 51 f = 1794.9 |proj g|= 1.4085
At iterate 52 f = 1794.8 |proj g|= 1.4096
At iterate 53 f = 1794.8 |proj g|= 1.5586
At iterate 54 f = 1794.8 |proj g|= 1.9141
At iterate 55 f = 1794.7 |proj g|= 1.9198
At iterate 56 f = 1794.6 |proj g|= 1.9208
At iterate 57 f = 1794.4 |proj g|= 1.9157
At iterate 58 f = 1794.3 |proj g|= 1.5069
At iterate 59 f = 1794.3 |proj g|= 0.85699
At iterate 60 f = 1794.2 |proj g|= 0.87585
At iterate 61 f = 1794.1 |proj g|= 1.9104
At iterate 62 f = 1794 |proj g|= 1.9077
At iterate 63 f = 1793.9 |proj g|= 1.2773
At iterate 64 f = 1793.8 |proj g|= 0.9437
At iterate 65 f = 1793.6 |proj g|= 1.4982
At iterate 66 f = 1793.5 |proj g|= 0.79269
At iterate 67 f = 1793.5 |proj g|= 1.8986
At iterate 68 f = 1793.5 |proj g|= 1.7785
At iterate 69 f = 1793.4 |proj g|= 0.76164
At iterate 70 f = 1793.3 |proj g|= 0.59482
At iterate 71 f = 1793.2 |proj g|= 1.3774
At iterate 72 f = 1792.9 |proj g|= 1.8933
At iterate 73 f = 1792.9 |proj g|= 1.8916
At iterate 74 f = 1792.6 |proj g|= 1.8902
At iterate 75 f = 1792.5 |proj g|= 1.6151
At iterate 76 f = 1792.4 |proj g|= 1.8862
At iterate 77 f = 1792.3 |proj g|= 1.8926
At iterate 78 f = 1792.1 |proj g|= 1.8948
At iterate 79 f = 1791.8 |proj g|= 1.8897
At iterate 80 f = 1791.3 |proj g|= 1.7858
At iterate 81 f = 1791 |proj g|= 1.4047
At iterate 82 f = 1790.8 |proj g|= 1.3592
At iterate 83 f = 1790.5 |proj g|= 1.8858
At iterate 84 f = 1790.3 |proj g|= 1.8875
At iterate 85 f = 1790.3 |proj g|= 1.7917
At iterate 86 f = 1790.2 |proj g|= 0.80701
At iterate 87 f = 1790.2 |proj g|= 1.8841
At iterate 88 f = 1790.2 |proj g|= 0.87955
At iterate 89 f = 1790.2 |proj g|= 0.73846
At iterate 90 f = 1790.2 |proj g|= 0.73632
At iterate 91 f = 1790.1 |proj g|= 1.8842
At iterate 92 f = 1790 |proj g|= 1.8837
At iterate 93 f = 1790 |proj g|= 1.3858
At iterate 94 f = 1790 |proj g|= 1.2493
At iterate 95 f = 1790 |proj g|= 0.80289
At iterate 96 f = 1789.6 |proj g|= 0.89767
At iterate 97 f = 1789.5 |proj g|= 0.92278
At iterate 98 f = 1789.5 |proj g|= 0.8842
At iterate 99 f = 1789.5 |proj g|= 1.3099
At iterate 100 f = 1789.5 |proj g|= 1.8019
At iterate 101 f = 1789.4 |proj g|= 1.7896
final value 1789.422897
stopped after 101 iterations
* The 4 best values (multistart) obtained are:
1788.679 1793.489 1788.68 1789.423
* The model corresponding to the best one (1788.679) is stored.
em_npp_level1_ms <- km(~., design = X_level1, response = y_level1, multistart = 4)
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~alpha_io + a_wl_io + bio_hum_cn + b_wl_io + dcatch_dlai_io +
dqcrit_io + dz0v_dh_io + f0_io + fd_io + g_area_io + g_root_io +
g_wood_io + gs_nvg_io + hw_sw_io + kaps_roth + knl_io + lai_max_io +
lai_min_io + lma_io + n_inorg_turnover + nmass_io + nr_io +
retran_l_io + retran_r_io + r_grow_io + rootd_ft_io + sigl_io +
sorp + tleaf_of_io + tlow_io + tupp_io + l_vg_soil
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 2 1.995574 2 1.998154 1.790352 2 2 2 1.998084 2 2 2 2 2 1.999201 2 1.996693 1.998361 2 2 1.995738 2 1.993455 1.995643 1.998832 2 2 2 2
- best initial criterion value(s) : -6195.135 -6196.379 -6196.726 -6196.907
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 6195.1 |proj g|= 1.8927
At iterate 1 f = 6122.2 |proj g|= 1.5707
At iterate 2 f = 6117.3 |proj g|= 1.9163
At iterate 3 f = 6109.4 |proj g|= 1.4404
At iterate 4 f = 6104 |proj g|= 1.4243
At iterate 5 f = 6098.9 |proj g|= 1.4154
At iterate 6 f = 6097.3 |proj g|= 1.9323
At iterate 7 f = 6092.6 |proj g|= 1.8995
At iterate 8 f = 6091.8 |proj g|= 1.8937
At iterate 9 f = 6087.8 |proj g|= 1.378
At iterate 10 f = 6083.5 |proj g|= 1.9385
At iterate 11 f = 6082.3 |proj g|= 1.9369
At iterate 12 f = 6080.2 |proj g|= 1.9146
At iterate 13 f = 6079.5 |proj g|= 1.5762
At iterate 14 f = 6077.5 |proj g|= 1.908
At iterate 15 f = 6073.7 |proj g|= 1.9322
At iterate 16 f = 6067.8 |proj g|= 1.9248
At iterate 17 f = 6064.1 |proj g|= 1.9127
At iterate 18 f = 6063.5 |proj g|= 1.5983
At iterate 19 f = 6062.2 |proj g|= 1.6987
At iterate 20 f = 6059 |proj g|= 1.9046
At iterate 21 f = 6058.7 |proj g|= 1.9053
At iterate 22 f = 6058.2 |proj g|= 1.8994
At iterate 23 f = 6057.8 |proj g|= 1.8933
At iterate 24 f = 6057.5 |proj g|= 1.8985
At iterate 25 f = 6057 |proj g|= 1.8754
At iterate 26 f = 6056.7 |proj g|= 1.8971
At iterate 27 f = 6056.5 |proj g|= 1.8613
At iterate 28 f = 6056.3 |proj g|= 1.8537
At iterate 29 f = 6056.2 |proj g|= 1.8426
At iterate 30 f = 6056 |proj g|= 1.827
At iterate 31 f = 6055.9 |proj g|= 1.8242
At iterate 32 f = 6055.8 |proj g|= 1.8994
At iterate 33 f = 6055.6 |proj g|= 1.9037
At iterate 34 f = 6054.9 |proj g|= 1.7038
At iterate 35 f = 6054.3 |proj g|= 1.6206
At iterate 36 f = 6054.2 |proj g|= 1.6148
At iterate 37 f = 6053.9 |proj g|= 1.8984
At iterate 38 f = 6053.8 |proj g|= 1.9007
At iterate 39 f = 6053.8 |proj g|= 1.8987
At iterate 40 f = 6053.6 |proj g|= 1.5367
At iterate 41 f = 6053.5 |proj g|= 1.5078
At iterate 42 f = 6053.4 |proj g|= 1.4519
At iterate 43 f = 6053 |proj g|= 1.3688
At iterate 44 f = 6052.2 |proj g|= 1.1155
At iterate 45 f = 6052.1 |proj g|= 1.8915
At iterate 46 f = 6051.9 |proj g|= 1.8886
At iterate 47 f = 6051.8 |proj g|= 0.6479
At iterate 48 f = 6051.8 |proj g|= 0.52019
At iterate 49 f = 6051.8 |proj g|= 0.77044
At iterate 50 f = 6051.8 |proj g|= 0.82304
At iterate 51 f = 6051.8 |proj g|= 0.63234
At iterate 52 f = 6051.7 |proj g|= 0.64195
At iterate 53 f = 6051.7 |proj g|= 0.63411
At iterate 54 f = 6051.7 |proj g|= 0.5188
At iterate 55 f = 6051.7 |proj g|= 0.34326
At iterate 56 f = 6051.7 |proj g|= 0.26942
At iterate 57 f = 6051.7 |proj g|= 0.24872
At iterate 58 f = 6051.7 |proj g|= 0.28742
At iterate 59 f = 6051.7 |proj g|= 0.16146
At iterate 60 f = 6051.7 |proj g|= 0.058951
At iterate 61 f = 6051.7 |proj g|= 0.077783
At iterate 62 f = 6051.7 |proj g|= 0.14845
At iterate 63 f = 6051.7 |proj g|= 0.30758
At iterate 64 f = 6051.7 |proj g|= 0.047144
At iterate 65 f = 6051.7 |proj g|= 0.047412
At iterate 66 f = 6051.7 |proj g|= 0.1167
At iterate 67 f = 6051.7 |proj g|= 0.053942
At iterate 68 f = 6051.7 |proj g|= 0.081799
At iterate 69 f = 6051.7 |proj g|= 0.13639
At iterate 70 f = 6051.7 |proj g|= 0.11673
At iterate 71 f = 6051.7 |proj g|= 0.037407
At iterate 72 f = 6051.7 |proj g|= 0.030923
iterations 72
function evaluations 86
segments explored during Cauchy searches 83
BFGS updates skipped 0
active bounds at final generalized Cauchy point 25
norm of the final projected gradient 0.0309228
final function value 6051.72
F = 6051.72
final value 6051.720346
converged
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 6196.4 |proj g|= 1.8972
At iterate 1 f = 6104.3 |proj g|= 1.9187
At iterate 2 f = 6102.5 |proj g|= 1.217
At iterate 3 f = 6097.6 |proj g|= 1.2133
At iterate 4 f = 6097.1 |proj g|= 1.9059
At iterate 5 f = 6096.4 |proj g|= 1.8918
At iterate 6 f = 6094.9 |proj g|= 1.1924
At iterate 7 f = 6086.1 |proj g|= 1.0919
At iterate 8 f = 6083.9 |proj g|= 1.0843
At iterate 9 f = 6078 |proj g|= 1.0141
At iterate 10 f = 6073.3 |proj g|= 1.927
At iterate 11 f = 6068.5 |proj g|= 1.5493
At iterate 12 f = 6068.1 |proj g|= 1.6551
At iterate 13 f = 6064.5 |proj g|= 1.5904
At iterate 14 f = 6059.6 |proj g|= 1.624
At iterate 15 f = 6059 |proj g|= 1.913
At iterate 16 f = 6058.5 |proj g|= 1.9084
At iterate 17 f = 6057.7 |proj g|= 1.9016
At iterate 18 f = 6057.4 |proj g|= 1.7285
At iterate 19 f = 6057.3 |proj g|= 1.7251
At iterate 20 f = 6057.1 |proj g|= 1.8995
At iterate 21 f = 6056.7 |proj g|= 1.9029
At iterate 22 f = 6056.4 |proj g|= 1.7013
At iterate 23 f = 6056.3 |proj g|= 1.697
At iterate 24 f = 6056.1 |proj g|= 1.903
At iterate 25 f = 6055.8 |proj g|= 1.9044
At iterate 26 f = 6055.7 |proj g|= 1.6591
At iterate 27 f = 6055.5 |proj g|= 1.6404
At iterate 28 f = 6055.1 |proj g|= 1.9042
At iterate 29 f = 6055 |proj g|= 1.9019
At iterate 30 f = 6054.6 |proj g|= 1.5569
At iterate 31 f = 6054.5 |proj g|= 1.5441
At iterate 32 f = 6054.3 |proj g|= 1.5225
At iterate 33 f = 6054 |proj g|= 1.9007
At iterate 34 f = 6053.7 |proj g|= 1.9022
At iterate 35 f = 6053.6 |proj g|= 1.8998
At iterate 36 f = 6053.3 |proj g|= 1.3771
At iterate 37 f = 6053.2 |proj g|= 1.3353
At iterate 38 f = 6052.9 |proj g|= 1.4117
At iterate 39 f = 6052.7 |proj g|= 1.3568
At iterate 40 f = 6052.5 |proj g|= 1.8916
At iterate 41 f = 6052.4 |proj g|= 1.5815
At iterate 42 f = 6052.3 |proj g|= 1.3489
At iterate 43 f = 6052.2 |proj g|= 1.3407
At iterate 44 f = 6052.2 |proj g|= 1.0547
At iterate 45 f = 6052.2 |proj g|= 1.8873
At iterate 46 f = 6052.1 |proj g|= 1.8873
At iterate 47 f = 6052.1 |proj g|= 1.8877
At iterate 48 f = 6052.1 |proj g|= 0.82023
At iterate 49 f = 6052.1 |proj g|= 0.81418
At iterate 50 f = 6052 |proj g|= 0.92533
At iterate 51 f = 6052 |proj g|= 1.2702
At iterate 52 f = 6052 |proj g|= 1.2091
At iterate 53 f = 6051.9 |proj g|= 1.5493
At iterate 54 f = 6051.9 |proj g|= 1.8899
At iterate 55 f = 6051.8 |proj g|= 1.8877
At iterate 56 f = 6051.8 |proj g|= 0.84843
At iterate 57 f = 6051.7 |proj g|= 0.37131
At iterate 58 f = 6051.7 |proj g|= 0.32436
At iterate 59 f = 6051.7 |proj g|= 0.18853
At iterate 60 f = 6051.7 |proj g|= 1.1456
At iterate 61 f = 6051.7 |proj g|= 0.32984
At iterate 62 f = 6051.7 |proj g|= 0.20092
At iterate 63 f = 6051.7 |proj g|= 0.1608
At iterate 64 f = 6051.7 |proj g|= 0.31933
At iterate 65 f = 6051.7 |proj g|= 0.26402
At iterate 66 f = 6051.7 |proj g|= 0.11718
At iterate 67 f = 6051.7 |proj g|= 0.15761
At iterate 68 f = 6051.7 |proj g|= 0.12054
At iterate 69 f = 6051.7 |proj g|= 0.11695
At iterate 70 f = 6051.7 |proj g|= 0.10249
At iterate 71 f = 6051.7 |proj g|= 0.10612
At iterate 72 f = 6051.7 |proj g|= 0.070778
At iterate 73 f = 6051.7 |proj g|= 0.11673
At iterate 74 f = 6051.7 |proj g|= 0.038171
At iterate 75 f = 6051.7 |proj g|= 0.015529
iterations 75
function evaluations 91
segments explored during Cauchy searches 84
BFGS updates skipped 0
active bounds at final generalized Cauchy point 25
norm of the final projected gradient 0.0155293
final function value 6051.72
F = 6051.72
final value 6051.720333
converged
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 6196.7 |proj g|= 1.9574
At iterate 1 f = 6115 |proj g|= 1.3644
At iterate 2 f = 6111.3 |proj g|= 1.914
At iterate 3 f = 6099.9 |proj g|= 1.9015
At iterate 4 f = 6086.6 |proj g|= 1.0709
At iterate 5 f = 6077.5 |proj g|= 0.99043
At iterate 6 f = 6066.7 |proj g|= 1.5266
At iterate 7 f = 6065.6 |proj g|= 1.9003
At iterate 8 f = 6065 |proj g|= 1.9001
At iterate 9 f = 6061.9 |proj g|= 1.753
At iterate 10 f = 6059.6 |proj g|= 1.7391
At iterate 11 f = 6058.9 |proj g|= 1.8997
At iterate 12 f = 6058.2 |proj g|= 1.8991
At iterate 13 f = 6056.8 |proj g|= 1.6747
At iterate 14 f = 6056.6 |proj g|= 1.6683
At iterate 15 f = 6056.4 |proj g|= 1.8989
At iterate 16 f = 6056.1 |proj g|= 1.8981
At iterate 17 f = 6055.6 |proj g|= 1.624
At iterate 18 f = 6055.1 |proj g|= 1.5961
At iterate 19 f = 6054.8 |proj g|= 1.8977
At iterate 20 f = 6054.3 |proj g|= 1.512
At iterate 21 f = 6053.6 |proj g|= 1.4585
At iterate 22 f = 6053.3 |proj g|= 1.7092
At iterate 23 f = 6053.1 |proj g|= 1.8939
At iterate 24 f = 6052.4 |proj g|= 1.8916
At iterate 25 f = 6052.3 |proj g|= 1.1631
At iterate 26 f = 6052.2 |proj g|= 1.1507
At iterate 27 f = 6052 |proj g|= 1.0787
At iterate 28 f = 6051.9 |proj g|= 1.0719
At iterate 29 f = 6051.9 |proj g|= 1.888
At iterate 30 f = 6051.8 |proj g|= 1.0383
At iterate 31 f = 6051.8 |proj g|= 1.4133
At iterate 32 f = 6051.8 |proj g|= 1.4093
At iterate 33 f = 6051.7 |proj g|= 1.266
At iterate 34 f = 6051.7 |proj g|= 0.88851
At iterate 35 f = 6051.7 |proj g|= 0.34575
At iterate 36 f = 6051.7 |proj g|= 0.26128
At iterate 37 f = 6051.7 |proj g|= 0.186
At iterate 38 f = 6051.7 |proj g|= 0.33445
At iterate 39 f = 6051.7 |proj g|= 0.13104
At iterate 40 f = 6051.7 |proj g|= 0.1562
At iterate 41 f = 6051.7 |proj g|= 0.41036
At iterate 42 f = 6051.7 |proj g|= 0.39617
At iterate 43 f = 6051.7 |proj g|= 1.2855
At iterate 44 f = 6051.7 |proj g|= 0.20394
At iterate 45 f = 6051.7 |proj g|= 0.12996
At iterate 46 f = 6051.7 |proj g|= 0.084199
At iterate 47 f = 6051.7 |proj g|= 0.11659
At iterate 48 f = 6051.7 |proj g|= 0.18427
At iterate 49 f = 6051.7 |proj g|= 0.06944
At iterate 50 f = 6051.7 |proj g|= 0.051749
At iterate 51 f = 6051.7 |proj g|= 0.079272
At iterate 52 f = 6051.7 |proj g|= 0.019155
At iterate 53 f = 6051.7 |proj g|= 0.027772
iterations 53
function evaluations 65
segments explored during Cauchy searches 66
BFGS updates skipped 0
active bounds at final generalized Cauchy point 25
norm of the final projected gradient 0.0277722
final function value 6051.72
F = 6051.72
final value 6051.720351
converged
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 6196.9 |proj g|= 1.9125
At iterate 1 f = 6120.8 |proj g|= 2
At iterate 2 f = 6110.3 |proj g|= 1.9974
At iterate 3 f = 6109.1 |proj g|= 1.9939
At iterate 4 f = 6106.3 |proj g|= 1.9745
At iterate 5 f = 6095.6 |proj g|= 1.8847
At iterate 6 f = 6091.4 |proj g|= 1.843
At iterate 7 f = 6076.2 |proj g|= 1.9074
At iterate 8 f = 6074.9 |proj g|= 1.6242
At iterate 9 f = 6074.4 |proj g|= 1.6527
At iterate 10 f = 6068.6 |proj g|= 1.8212
At iterate 11 f = 6068 |proj g|= 1.7873
At iterate 12 f = 6066.9 |proj g|= 1.8921
At iterate 13 f = 6065.7 |proj g|= 1.8899
At iterate 14 f = 6063.7 |proj g|= 1.8237
At iterate 15 f = 6062.4 |proj g|= 1.841
At iterate 16 f = 6059.2 |proj g|= 1.8905
At iterate 17 f = 6058.3 |proj g|= 1.8317
At iterate 18 f = 6057.8 |proj g|= 1.8881
At iterate 19 f = 6057.3 |proj g|= 1.8166
At iterate 20 f = 6056 |proj g|= 1.7854
At iterate 21 f = 6055.5 |proj g|= 1.7532
At iterate 22 f = 6055.3 |proj g|= 1.9023
At iterate 23 f = 6055 |proj g|= 1.904
At iterate 24 f = 6054.6 |proj g|= 1.899
At iterate 25 f = 6054.5 |proj g|= 1.8935
At iterate 26 f = 6054.1 |proj g|= 1.6674
At iterate 27 f = 6053.7 |proj g|= 1.6291
At iterate 28 f = 6053.4 |proj g|= 1.8916
At iterate 29 f = 6053.3 |proj g|= 1.5882
At iterate 30 f = 6053.2 |proj g|= 1.5729
At iterate 31 f = 6053.2 |proj g|= 1.5673
At iterate 32 f = 6052.1 |proj g|= 1.2714
At iterate 33 f = 6052.1 |proj g|= 1.8838
At iterate 34 f = 6052.1 |proj g|= 1.8846
At iterate 35 f = 6051.9 |proj g|= 1.8848
At iterate 36 f = 6051.8 |proj g|= 0.91751
At iterate 37 f = 6051.8 |proj g|= 0.94406
At iterate 38 f = 6051.7 |proj g|= 0.50186
At iterate 39 f = 6051.7 |proj g|= 0.20636
At iterate 40 f = 6051.7 |proj g|= 0.17977
At iterate 41 f = 6051.7 |proj g|= 0.15895
At iterate 42 f = 6051.7 |proj g|= 0.14708
At iterate 43 f = 6051.7 |proj g|= 0.19519
At iterate 44 f = 6051.7 |proj g|= 0.10793
At iterate 45 f = 6051.7 |proj g|= 0.61841
At iterate 46 f = 6051.7 |proj g|= 0.034534
At iterate 47 f = 6051.7 |proj g|= 0.033439
iterations 47
function evaluations 56
segments explored during Cauchy searches 54
BFGS updates skipped 0
active bounds at final generalized Cauchy point 25
norm of the final projected gradient 0.033439
final function value 6051.72
F = 6051.72
final value 6051.720533
converged
* The 4 best values (multistart) obtained are:
6051.72 6051.72 6051.72 6051.721
* The model corresponding to the best one (6051.72) is stored.
loo_npp_level0 <- leaveOneOut.km(em_npp_level0, type = 'UK', trend.reestim = TRUE)
loo_npp_level1 <- leaveOneOut.km(em_npp_level1, type = 'UK', trend.reestim = TRUE)
RMSE ( loo_npp_level0$mean, y_level0)
[1] 10.81138
RMSE ( loo_npp_level1$mean, y_level1)
[1] 369553.5
# How about MAE over the range
prop_mae <- function(Y, Ypred){
# mean absolute error as a proportion of the range of output
absdiff <- abs(diff(range(Y)))
mae <- MAE(Y, Ypred)
propmae <- (mae / absdiff) * 100
propmae
}
prop_mae(y_level0, loo_npp_level0$mean)
[1] 8.354225
prop_mae(y_level1, loo_npp_level1$mean)
[1] 5.220873
NA
NA
NA
NA
The problem with doing constraint first is that you end up with a non-hypercube shaped input space (corners have been knocked off by constraint), which is not ideal. We might therefore want different sensitivity measures for pre- and post-constrained ensemble.
# MOVE THIS TO IMPTOOLS OR EMTOOLS
# Given a km model, produce some error statistics
# It doesn't look like Multistart makes a big difference at all for NPP
errstats_npp_level0 <- kmLooStats(km = em_npp_level0)
errstats_npp_level0_ms <- kmLooStats(km = em_npp_level0_ms)
errstats_npp_level1 <- kmLooStats(km = em_npp_level1)
errstats_npp_level1_ms <- kmLooStats(km = em_npp_level1_ms)
# proportional mean absolute error
errstats_npp_level0$pmae
[1] 8.354225
errstats_npp_level0_ms$pmae
[1] 8.353783
errstats_npp_level1$pmae
[1] 5.220873
errstats_npp_level1_ms$pmae
[1] 5.220881
# DiceEval is useful but slow/awkward
# DE_em_npp_level0 <- modelFit(X = X_level0, Y = y_level0, type = 'Kriging', formula = ~. )
# DE_em_npp_level1 <- modelFit(X = X_level1, Y = y_level1, type = 'Kriging', formula = ~. )
# npp_em_cv_level0 <- crossValidation(DE_em_npp_level0, 5)
# npp_em_cv_level1 <- crossValidation(DE_em_npp_level1, 5)
#sensvar needs to go into emtools with oaat_design
sensvar <- function(oaat_pred, n, d){
# Calculate variance as a global sensitivity meansure
out = rep(NA,d)
for(i in 1:d){
ix = seq(from = ((i*n) - (n-1)), to = (i*n), by = 1)
out[i] = var(oaat_pred$mean[ix])
}
out
}
twoStep_glmnet <- function(X, y, nugget=NULL, nuggetEstim=FALSE, noiseVar=NULL, seed=NULL, trace=FALSE, maxit=100,
REPORT=10, factr=1e7, pgtol=0.0, parinit=NULL, popsize=100){
# Use lasso to reduce input dimension of emulator before
# building.
control_list = list(trace=trace, maxit=maxit, REPORT=REPORT, factr=factr, pgtol=pgtol, pop.size=popsize)
xvars = colnames(X)
data = data.frame(response=y, x=X)
colnames(data) <- c("response", xvars)
nval = length(y)
# fit a lasso by cross validation
library(glmnet)
fit_glmnet_cv = cv.glmnet(x=X,y=y)
# The labels of the retained coefficients are here
# (retains intercept at index zero)
coef_i = (coef(fit_glmnet_cv, s = "lambda.1se"))@i
labs = labels(coef(fit_glmnet_cv, s = "lambda.1se"))[[1]]
labs = labs[-1] # remove intercept
glmnet_retained = labs[coef_i]
start_form = as.formula(paste("~ ", paste(glmnet_retained , collapse= "+")))
m = km(start_form, design=X, response=y, nugget=nugget, parinit=parinit,
nugget.estim=nuggetEstim, noise.var=noiseVar, control=control_list)
return(list(x=X, y=y, nugget=nugget, nuggetEstim=nuggetEstim,
noiseVar=noiseVar, emulator=m, seed=seed, coefs=m@covariance@range.val,
trends=m@trend.coef, meanTerms=all.vars(start_form), fit_glmnet_cv=fit_glmnet_cv))
}
It looks as though bwl_io is very influential across a number of variables, even though it didn’t appear that interesting in the parginal plots. Why is that?
twoStep_sens <- function(X, y, n=21, predtype = 'UK', nugget=NULL, nuggetEstim=FALSE, noiseVar=NULL, seed=NULL, trace=FALSE, maxit=100,
REPORT=10, factr=1e7, pgtol=0.0, parinit=NULL, popsize=100){
# Sensitivity analysis with twoStep emulator.
# Calculates the variance of the output varied one at a time across each input.
d = ncol(X)
X_norm <- normalize(X)
X_oaat <- oaat_design(X_norm, n, med = TRUE)
colnames(X_oaat) = colnames(X)
twoStep_em = twoStep_glmnet(X=X, y=y, nugget=nugget, nuggetEstim=nuggetEstim, noiseVar=noiseVar,
seed=seed, trace=trace, maxit=maxit,
REPORT=REPORT, factr=factr, pgtol=pgtol,
parinit=parinit, popsize=popsize)
oaat_pred = predict(twoStep_em$emulator, newdata = X_oaat, type = predtype)
sens = sensvar(oaat_pred = oaat_pred, n=n, d=d)
out = sens
out
}
if (file.exists("oat_twostep.rdata")) {
load("oat_twostep.rdata")
} else {
oat_test <- twoStep_sens(X = X_level1, y = y_level1)
save(oat_test, file = "oat_twostep.rdata")
}
A closer look at bwl_io now that the impact of f0_io has been removed shows a large number of “zero” NPP when bwl_io is at low values, which could well be the source of apparent sensitivity.
Take only higher values of bwl_io for the next round of constraints.
y_names_sum <- c('nbp_lnd_sum', 'fLuc_lnd_sum', 'npp_nlim_lnd_sum', 'cSoil_lnd_sum',
'cVeg_lnd_sum', 'landCoverFrac_lnd_sum', 'fHarvest_lnd_sum',
'lai_lnd_sum', 'rh_lnd_sum', 'treeFrac_lnd_sum', 'c3PftFrac_lnd_sum',
'c4PftFrac_lnd_sum', 'shrubFrac_lnd_sum', 'baresoilFrac_lnd_sum')
if (file.exists("oaat_Y.rdata")) {
load("oaat_Y.rdata")
} else {
oat_var_sensmat_Y <- matrix(NA, nrow = length(y_names_sum), ncol = ncol(X_level1))
for(i in 1:length(y_names_sum)){
yname <- y_names_sum[i]
y <- Y_level1[, yname]
oat <- twoStep_sens(X = X_level1, y = y)
oat_var_sensmat_Y[i, ] <- oat
}
save(y_names_sum, oat_var_sensmat_Y, file = "oaat_Y.rdata")
}
# normalize the sensitivity matrix
colnames(oat_var_sensmat_Y) <- colnames(X_level1)
rownames(oat_var_sensmat_Y) <- y_names_sum
#test <- normalize(t(oat.var.sensmat))
#image(test)
#par()
heatmap(oat_var_sensmat_Y, Rowv = NA, Colv = NA, mar = c(10,10), scale = 'row')
heatmap(oat_var_sensmat_Y, mar = c(10,10), scale = 'row')
normsens_Y <- normalize(t(oat_var_sensmat_Y))
par(mar = c(12,12,5,2))
image(normsens_Y, axes = FALSE, col = blues)
axis(1, at = seq(from = 0, to = 1, length.out = p), labels = colnames(X_level1), las = 2)
axis(2, at = seq(from = 0, to = 1, length.out = length(y_names_sum)), labels = y_names_sum, las = 1)
mtext('One-at-a-time sensitivity, variance across level 1 ensemble', side = 3, adj = 0, line = 2, cex = 1.8)
# Plot the regular km emulator.
p <- ncol(X_level1)
y_level1 <- Y_level1[,'npp_nlim_lnd_sum']
par(mfrow = c(5,7), mar = c(3,1,3,1))
for(i in 1:p){
plot(X_level1[,i], y_level1, xlab = '', ylab = '', main = colnames(X_level1)[i])
}
level1a_ix <- which(X_level0[, 'f0_io'] < 0.9 & X_level0[, 'b_wl_io'] > 0.15 )
X_level1a <- X_level0[level1a_ix, ]
Y_level1a <- Y_level0[level1a_ix,]
YAnom_level1a <- YAnom_level0[level1a_ix, ]
y_level1a <- Y_level1a[, 'npp_nlim_lnd_sum']
em_level1a <- km(~., design = X_level1a, response = y_level1a)
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~alpha_io + a_wl_io + bio_hum_cn + b_wl_io + dcatch_dlai_io +
dqcrit_io + dz0v_dh_io + f0_io + fd_io + g_area_io + g_root_io +
g_wood_io + gs_nvg_io + hw_sw_io + kaps_roth + knl_io + lai_max_io +
lai_min_io + lma_io + n_inorg_turnover + nmass_io + nr_io +
retran_l_io + retran_r_io + r_grow_io + rootd_ft_io + sigl_io +
sorp + tleaf_of_io + tlow_io + tupp_io + l_vg_soil
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 1.698141 1.994798 1.990622 1.998154 1.778477 2 2 2 1.998084 2 2 2 1.99598 2 1.989889 1.997502 1.989483 1.98997 1.987916 1.983347 1.988424 2 1.990947 1.995643 1.994232 1.992247 2 2 2
- best initial criterion value(s) : -5133.394
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 5133.4 |proj g|= 1.8131
At iterate 1 f = 5121 |proj g|= 1.2902
At iterate 2 f = 5116.2 |proj g|= 1.1233
At iterate 3 f = 5113.3 |proj g|= 1.9533
At iterate 4 f = 5109.2 |proj g|= 1.8973
At iterate 5 f = 5108.8 |proj g|= 1.8844
At iterate 6 f = 5107.7 |proj g|= 1.8317
At iterate 7 f = 5106.8 |proj g|= 1.7101
At iterate 8 f = 5105.7 |proj g|= 1.6716
ys=-1.681e-02 -gs= 1.079e+00, BFGS update SKIPPED
At iterate 9 f = 5104.7 |proj g|= 1.6302
ys=-1.744e-02 -gs= 1.071e+00, BFGS update SKIPPED
At iterate 10 f = 5100 |proj g|= 1.4684
At iterate 11 f = 5098.1 |proj g|= 1.4639
ys=-1.189e-01 -gs= 1.821e+00, BFGS update SKIPPED
At iterate 12 f = 5096.7 |proj g|= 1.4348
At iterate 13 f = 5085.8 |proj g|= 1.6376
At iterate 14 f = 5083.2 |proj g|= 1.5237
At iterate 15 f = 5082.4 |proj g|= 1.4883
At iterate 16 f = 5081.9 |proj g|= 0.95479
At iterate 17 f = 5081.1 |proj g|= 0.77253
At iterate 18 f = 5080.9 |proj g|= 0.78443
At iterate 19 f = 5080.6 |proj g|= 1.4664
At iterate 20 f = 5080 |proj g|= 1.4898
At iterate 21 f = 5079.9 |proj g|= 0.61139
At iterate 22 f = 5079.9 |proj g|= 0.51856
At iterate 23 f = 5079.8 |proj g|= 0.53696
At iterate 24 f = 5079.7 |proj g|= 0.52792
At iterate 25 f = 5079.7 |proj g|= 0.61936
At iterate 26 f = 5079.7 |proj g|= 0.48489
At iterate 27 f = 5079.7 |proj g|= 0.28752
At iterate 28 f = 5079.7 |proj g|= 0.30663
At iterate 29 f = 5079.7 |proj g|= 0.37981
At iterate 30 f = 5079.7 |proj g|= 0.24244
At iterate 31 f = 5079.7 |proj g|= 0.34063
At iterate 32 f = 5079.7 |proj g|= 0.1443
At iterate 33 f = 5079.7 |proj g|= 0.17564
At iterate 34 f = 5079.7 |proj g|= 0.18611
At iterate 35 f = 5079.7 |proj g|= 0.39674
At iterate 36 f = 5079.7 |proj g|= 0.080551
At iterate 37 f = 5079.7 |proj g|= 0.078492
At iterate 38 f = 5079.7 |proj g|= 0.10282
At iterate 39 f = 5079.7 |proj g|= 0.38568
At iterate 40 f = 5079.7 |proj g|= 0.14667
At iterate 41 f = 5079.7 |proj g|= 0.066404
At iterate 42 f = 5079.6 |proj g|= 0.079053
At iterate 43 f = 5079.6 |proj g|= 0.079532
At iterate 44 f = 5079.6 |proj g|= 0.090775
At iterate 45 f = 5079.6 |proj g|= 0.051122
At iterate 46 f = 5079.6 |proj g|= 0.044645
At iterate 47 f = 5079.6 |proj g|= 0.033494
At iterate 48 f = 5079.6 |proj g|= 0.054964
At iterate 49 f = 5079.6 |proj g|= 0.010217
At iterate 50 f = 5079.6 |proj g|= 0.0098125
iterations 50
function evaluations 60
segments explored during Cauchy searches 70
BFGS updates skipped 3
active bounds at final generalized Cauchy point 20
norm of the final projected gradient 0.00981252
final function value 5079.65
F = 5079.65
final value 5079.648779
converged
plot(em_level1a)
NA
NA
if (file.exists("oaat_level1a_Y.rdata")) {
load("oaat_level1a_Y.rdata")
} else {
oat_var_sensmat_level1a_Y <- matrix(NA, nrow = length(y_names_sum), ncol = ncol(X_level1a))
for(i in 1:length(y_names_sum)){
yname <- y_names_sum[i]
y <- Y_level1a[, yname]
oat <- twoStep_sens(X = X_level1a, y = y)
oat_var_sensmat_level1a_Y[i, ] <- oat
}
save(y_names_sum, oat_var_sensmat_level1a_Y, file = "oaat_level1a_Y.rdata")
}
p <- ncol(X_level1a)
y_level1a <- Y_level1a[,'npp_nlim_lnd_sum']
par(mfrow = c(5,7), mar = c(3,1,3,1))
for(i in 1:p){
plot(X_level1a[,i], y_level1a, xlab = '', ylab = '', main = colnames(X_level1a)[i], xlim = c(0,1))
}
# normalize the sensitivity matrix
colnames(oat_var_sensmat_level1a_Y) <- colnames(X_level1a)
rownames(oat_var_sensmat_level1a_Y) <- y_names_sum
#test <- normalize(t(oat.var.sensmat))
#image(test)
#par()
heatmap(oat_var_sensmat_level1a_Y, Rowv = NA, Colv = NA, mar = c(10,10), scale = 'row')
heatmap(oat_var_sensmat_level1a_Y, mar = c(10,10), scale = 'row')
normsens_level1a_Y <- normalize(t(oat_var_sensmat_level1a_Y))
par(mar = c(12,12,5,2))
image(normsens_level1a_Y, axes = FALSE, col = blues)
axis(1, at = seq(from = 0, to = 1, length.out = p), labels = colnames(X_level1a), las = 2)
axis(2, at = seq(from = 0, to = 1, length.out = length(y_names_sum)), labels = y_names_sum, las = 1)
mtext('One-at-a-time sensitivity, variance across level 1a ensemble', side = 3, adj = 0, line = 2, cex = 1.8)
It looks as though both the absolute value and the change over time are controlled by the same parameters.
# This fails for "cVeg_lnd_sum"
# The result will be that some of the columns are repeated.
if (file.exists("oaat_YAnom.rdata")) {
load("oaat_YAnom.rdata")
} else {
oat_var_sensmat_YAnom <- matrix(NA, nrow = length(y_names_sum), ncol = ncol(X_level1))
for(i in 1:length(y_names_sum)){
yname <- y_names_sum[i]
y <- YAnom_level1[, yname]
try(oat <- twoStep_sens(X = X_level1, y = y))
oat_var_sensmat_YAnom[i, ] <- oat
}
save(y_names_sum, oat_var_sensmat_YAnom, file = "oaat_YAnom.rdata")
}
The emulators appear to be at least capturing the broad response for all of the output variables.
First, plot the straight kriging emulators
# normalize the sensitivity matrix
colnames(oat_var_sensmat_YAnom) <- colnames(X_level1)
rownames(oat_var_sensmat_YAnom) <- y_names_sum
#test <- normalize(t(oat.var.sensmat))
#image(test)
#par()
heatmap(oat_var_sensmat_YAnom, Rowv = NA, Colv = NA, mar = c(10,10), scale = 'row')
heatmap(oat_var_sensmat_YAnom, mar = c(10,6), scale = 'row')
normsens_YAnom <- normalize(t(oat_var_sensmat_YAnom))
par(mar = c(12,12,5,2))
image(normsens_YAnom, axes = FALSE, col = blues)
axis(1, at = seq(from = 0, to = 1, length.out = p), labels = colnames(X_level1), las = 2)
axis(2, at = seq(from = 0, to = 1, length.out = length(y_names_sum)), labels = y_names_sum, las = 1)
mtext('One-at-a-time sensitivity, variance of historical change across level 1 ensemble', side = 3, adj = 0, line = 2, cex = 1.8)
par(mfrow = c(2,1), mar = c(12,12,5,2))
image(normsens_Y, axes = FALSE, col = blues)
axis(1, at = seq(from = 0, to = 1, length.out = p), labels = colnames(X_level1), las = 2)
axis(2, at = seq(from = 0, to = 1, length.out = length(y_names_sum)), labels = y_names_sum, las = 1)
mtext('One-at-a-time sensitivity, variance of historical change across level 1 ensemble', side = 3, adj = 0, line = 2, cex = 1.8)
image(normsens_YAnom, axes = FALSE, col = blues)
axis(1, at = seq(from = 0, to = 1, length.out = p), labels = colnames(X_level1), las = 2)
axis(2, at = seq(from = 0, to = 1, length.out = length(y_names_sum)), labels = y_names_sum, las = 1)
mtext('One-at-a-time sensitivity, variance of historical change across level 1 ensemble', side = 3, adj = 0, line = 2, cex = 1.8)
NA
NA
if (file.exists("km_emulators_Y.rdata")) {
load("km_emulators_Y.rdata")
} else {
emlist_km_Y <- vector(mode = 'list', length = length(y_names_sum))
for(i in 1:length(y_names_sum)){
yname <- y_names_sum[i]
y <- Y_level1[, yname]
em <- km(~., design = X_level1, response = y)
emlist_km_Y[[i]] <- em
}
loolist_km_Y <- vector(mode = 'list', length = length(y_names_sum))
for(i in 1:length(y_names_sum)){
loo <- leaveOneOut.km(model = emlist_km_Y[[i]], type = 'UK', trend.reestim = TRUE)
loolist_km_Y[[i]] <- loo
}
save(emlist_km_Y,loolist_km_Y, file = "km_emulators_Y.rdata")
}
loostats_km_Y <- vector(mode = 'list', length = length(y_names_sum))
for(i in 1:length(emlist_km_Y)){
loostats <- kmLooStats(emlist_km_Y[[i]])
loostats_km_Y[[i]] <- loostats
print(loostats$pmae)
}
[1] 5.433077
[1] 5.142409
[1] 5.2209
[1] 4.193005
[1] 4.219396
[1] 4.531841
[1] 5.629425
[1] 8.565018
[1] 5.224583
[1] 9.223968
[1] 7.089
[1] 7.78196
[1] 6.900971
[1] 6.929568
Next, plot the twostep glmnet/km emulators
par(mfrow = c(4,4), mar = c(3,4,2,2), oma = c(4,4,4,0.1))
for(i in 1:length(loolist_km_Y)){
y <- Y_level1[, y_names_sum[i]]
loo <- loolist_km_Y[[i]]
ylim <- range(c(loo$mean - (2*loo$sd), loo$mean + (2*loo$sd)) )
plot(y, loo$mean, xlab = '', ylab = '', main = y_names_sum[i] , ylim = ylim, col = makeTransparent('black', 70),
pch = 19)
segments(x0 = y, y0 = loo$mean - (2*loo$sd) , x1 = y , y1 = loo$mean + (2*loo$sd), col = makeTransparent('black', 70))
abline(0,1)
legend('bottomright',legend = paste('mae =',round(loostats_km_Y[[i]]$pmae,2),'%') , bty = 'n')
}
mtext('Actual', side = 1, line = 1, outer = TRUE, cex = 2 )
mtext('Predicted', side = 2, line = 0, outer = TRUE, cex = 2)
mtext('Modern Value (Y)', side = 3, line = 0, outer = TRUE, cex = 2)
if (file.exists("km_emulators_YAnom.rdata")) {
load("km_emulators_YAnom.rdata")
} else {
emlist_km_YAnom <- vector(mode = 'list', length = length(y_names_sum))
for(i in 1:length(y_names_sum)){
yname <- y_names_sum[i]
y <- YAnom_level1[, yname]
em <- km(~., design = X_level1, response = y)
emlist_km_YAnom[[i]] <- em
}
loolist_km_YAnom <- vector(mode = 'list', length = length(y_names_sum))
for(i in 1:length(y_names_sum)){
loo <- leaveOneOut.km(model = emlist_km_YAnom[[i]], type = 'UK', trend.reestim = TRUE)
loolist_km_YAnom[[i]] <- loo
}
save(emlist_km_YAnom,loolist_km_YAnom, file = "km_emulators_YAnom.rdata")
}
par(mfrow = c(4,4), mar = c(3,4,2,2), oma = c(4,4,4,0.1))
for(i in 1:length(loolist_km_YAnom)){
y <- YAnom_level1[, y_names_sum[i]]
loo <- loolist_km_YAnom[[i]]
ylim <- range(c(loo$mean - (2*loo$sd), loo$mean + (2*loo$sd)) )
plot(y, loo$mean, xlab = '', ylab = '', main = y_names_sum[i] , ylim = ylim, col = makeTransparent('black', 70),
pch = 19)
segments(x0 = y, y0 = loo$mean - (2*loo$sd) , x1 = y , y1 = loo$mean + (2*loo$sd), col = makeTransparent('black', 70))
abline(0,1)
}
mtext('Actual', side = 1, line = 1, outer = TRUE, cex = 2 )
mtext('Predicted', side = 2, line = 0, outer = TRUE, cex = 2)
mtext('Change over time (YAnom)', side = 3, line = 1, outer = TRUE, cex = 2)
We use the leave-one-out Mean Absolute Error, expressed as a percentage of the range of the output across the ensemble. We find that the twostep emulatorisn’t significantly more accurate, and is indeed less accurate for tree fraction.
# Twostep glmnet emulators
if (file.exists("ts_emulators_Y.rdata")) {
load("ts_emulators_Y.rdata")
} else {
emlist_twoStep_glmnet_Y <- vector(mode = 'list', length = length(y_names_sum))
for(i in 1:length(y_names_sum)){
yname <- y_names_sum[i]
y <- Y_level1[, yname]
em <- twoStep_glmnet(X = X_level1, y = y)
emlist_twoStep_glmnet_Y[[i]] <- em
}
loolist_twoStep_glmnet_Y <- vector(mode = 'list', length = length(y_names_sum))
for(i in 1:length(y_names_sum)){
loo <- leaveOneOut.km(model = emlist_twoStep_glmnet_Y[[i]]$emulator, type = 'UK', trend.reestim = TRUE)
loolist_twoStep_glmnet_Y[[i]] <- loo
}
save(emlist_twoStep_glmnet_Y, loolist_twoStep_glmnet_Y, file = "ts_emulators_Y.rdata")
}
# Can get numerical performance using
loostats_twoStep_glmnet_Y <- vector(mode = 'list', length = length(y_names_sum))
for(i in 1:length(emlist_twoStep_glmnet_Y)){
loostats <- kmLooStats(emlist_twoStep_glmnet_Y[[i]]$emulator)
loostats_twoStep_glmnet_Y[[i]] <- loostats
print(loostats$pmae)
}
[1] 5.410355
[1] 4.733929
[1] 5.215455
[1] 4.173501
[1] 4.03861
[1] 4.597044
[1] 5.501413
[1] 8.563912
[1] 5.213222
[1] 11.36184
[1] 7.260354
[1] 7.707121
[1] 6.725096
[1] 6.865819
To use History Matching, we need to specify targets for various model outputs. We treat these targets as “observations” with an uncertainty where a model run marked as “implausible” (beyond 3sd) matches the hard boundaries previously identified by A. Wiltshire as being desirable.
Choose the centre of the (implied) uniform distribution. cs_gb.target = (3000 - 750) / 2 = 1125 cv.target = (800 - 300) / 2 = 250 npp_n_gb.target = (80 - 35) / 2 = 22.5
nbp.target = 0 (gpp.target = 75) (runoff.target = 1)
(to do: visualise implausibility of design and loo emulated values of design as histogram)
par(mfrow = c(4,4), mar = c(3,4,2,2), oma = c(4,4,4,0.1))
for(i in 1:length(loolist_twoStep_glmnet_Y)){
y <- Y_level1[, y_names_sum[i]]
loo <- loolist_twoStep_glmnet_Y[[i]]
ylim <- range(c(loo$mean - (2*loo$sd), loo$mean + (2*loo$sd)) )
plot(y, loo$mean, xlab = '', ylab = '', main = y_names_sum[i] , ylim = ylim, col = makeTransparent('black', 70),
pch = 19)
segments(x0 = y, y0 = loo$mean - (2*loo$sd) , x1 = y , y1 = loo$mean + (2*loo$sd), col = makeTransparent('black', 70))
abline(0,1)
legend('bottomright',legend = paste('mae =',round(loostats_twoStep_glmnet_Y[[i]]$pmae,2),'%') , bty = 'n')
}
mtext('Actual', side = 1, line = 1, outer = TRUE, cex = 2 )
mtext('Predicted', side = 2, line = 0, outer = TRUE, cex = 2)
mtext('Modern Value (Y)', side = 3, line = 0, outer = TRUE, cex = 2)
km_pmae <- sapply(loostats_km_Y, '[[', 'pmae')
ts_pmae <- sapply(loostats_twoStep_glmnet_Y, '[[', 'pmae')
par(mar = c(12,4,2,1), las =1 )
plot(1:length(y_names_sum), km_pmae,
ylim = c(0,15), pch = 19,
axes = FALSE, xlab = '',
ylab = 'LOO MAE (% of range)',
cex = 1.2)
points(1:length(y_names_sum),ts_pmae , col= 'red', pch = 19, cex = 1.2)
legend('topleft', c('km emulator', 'twoStep emulator'), pch = 19, col = c('black', 'red'), pt.cex = 1.2)
axis (2)
par(las = 2)
axis(1, at = 1:length(y_names_sum), labels = y_names_sum)
Plot the original ensemble, plus the stuff that matches the constraints. Include anomalies.
# Write an emulator wrapper
# Write a leave-one-out wrapper
# Create a list of emulator fits, for both km and twoStep methods.
# Use mclapply to build the lists
# use code from HDE package
# Make sure errors are handled adequately.
# Can we write it to use any emulator? (i.e km, twostep, something from another package?)
We find that adding a constraint to level 2 constrains the behaviour of the soil carbon pool, but not the vegetation carbon pool. Probably not a surprise, given the Soil Carbon pool (and changes) are much larger than the vegetation carbon pool.
#cSoil_ens_anom [toplevel_to_level_1a_ix, ]
par(mfrow= c(1,4), las = 1)
plotcol <- c(makeTransparent('black', 70))
overplotcol <- c(makeTransparent('tomato3', 200))
ylim = range(cSoil_ens)
matplot(years, t(cSoil_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'cSoil',
bty = 'n')
matlines( years, t((cSoil_ens[toplevel_to_level_1a_ix, ])[level2_ix, ]),col = overplotcol, lwd = 1.5, lty = 'solid')
ylim = range(cSoil_ens)
matplot(years, t(cVeg_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'cVeg',
bty = 'n')
matlines( years, t((cVeg_ens[toplevel_to_level_1a_ix, ])[level2_ix, ]), col = overplotcol, lwd = 1.5, lty = 'solid')
ylim = range(cSoil_ens_anom)
matplot(years, t(cSoil_ens_anom), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'cSoil Anomaly',
bty = 'n')
matlines( years, t((cSoil_ens_anom[toplevel_to_level_1a_ix, ])[level2_ix, ]),col = overplotcol, lwd = 1.5, lty = 'solid')
ylim = range(cSoil_ens_anom)
matplot(years, t(cVeg_ens_anom), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'cVeg Anomaly',
bty = 'n')
matlines( years, t((cVeg_ens_anom[toplevel_to_level_1a_ix, ])[level2_ix, ]),col = overplotcol,lwd = 1.5, lty = 'solid')
We plot the JULES total land carbon change from 1850, together with “observations” from the Global Carbon Budget (Friedligstein et al, 2020). The “observations are the cumulative sum of the ‘land sink’ column on the”historical observations tab of the data from the paper. It states “The land sink is the average of several dynamic global vegetation models that reproduce the observed mean total land sink of the 1990s.”
par(mfrow= c(1,2), las = 1)
ylim = range(total_land_carbon_ens)
matplot(years, t(total_land_carbon_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'Total land carbon',
bty = 'n')
matlines( years, t((total_land_carbon_ens[toplevel_to_level_1a_ix, ])[level2_ix, ]), col = overplotcol, lty = 'solid', lwd = 1.5)
ylim = range(total_land_carbon_anom)
matplot(years, t(total_land_carbon_anom), type = 'l', lty = 'solid',ylim = ylim, col = plotcol,
ylab = 'GtC', main = 'Total land carbon anomaly',
bty = 'n')
matlines( years, t((total_land_carbon_anom[toplevel_to_level_1a_ix, ])[level2_ix, ]), col = overplotcol, lty = 'solid', lwd = 1.5)
#Anomalize historical observations to 1850 - 1870
historical_total_land_carbon_obs <- cumsum(historical_carbon_budget$`land sink`)
historical_total_land_carbon_obs_anom <- historical_total_land_carbon_obs - historical_total_land_carbon_obs[which(historical_carbon_budget$Year %in% 1850:1870)]
lines(historical_carbon_budget$Year,historical_total_land_carbon_obs_anom, type = 'l',col = 'blue', lwd = 2)
legend('topleft', legend = c('Ruled out', 'Level1a constraint', 'historical'), col = c('black', overplotcol, 'blue'),
lwd = c(1,1.5,2), lty = 'solid')
NA
NA
I think to make a fair comparison, we might need to take the diff of the anomaly (or just the timeseries), as the above represents the total change since 1850, and I think all the “land sink” stuff looks at the year-to-year changes.
landsink_ens <- matrix(NA, nrow = nrow(total_land_carbon_ens), ncol = ncol(total_land_carbon_ens)-1)
for(i in 1:nrow(landsink_ens)){
landsink_ens[i, ] <- diff(total_land_carbon_ens[i, ])
}
ylim = range(landsink_ens)
matplot(years[-1], t(landsink_ens), type = 'l', lty = 'solid',ylim = ylim, col = plotcol, xlab = '',
ylab = 'GtC/year', main = 'Total land carbon sink',
bty = 'n')
matlines( years[-1], t((landsink_ens[toplevel_to_level_1a_ix, ])[level2_ix, ]), col = 'tomato3', lty = 'solid')
lines(historical_carbon_budget$Year, historical_carbon_budget$`land sink`, col = 'blue', lwd = 2, xlab = '')
legend('bottomleft', legend = c('Ruled out','level 1a constrained','historical'), col = c('black','tomato3', 'blue' ), lty ='solid',
lwd = c(1,1,2))
NA
NA
What do these parts of parameter space tell us about what we need to do to have the model reproduce reality?
#Y.target = c(cs_gb.target, cv.target, npp_n_gb.target, runoff.target, nbp.target)
ynames_const <- c('nbp_lnd_sum', 'npp_nlim_lnd_sum', 'cSoil_lnd_sum', 'cVeg_lnd_sum')
yunits_const <- c('GtC/year', 'GtC/year', 'GtC', 'GtC')
Y_const_level1a <- Y_level1a[, ynames_const]
scalevec <- c(1e12/ysec, 1e12/ysec, 1e12, 1e12)
Y_const_level1a_scaled <- sweep(Y_const_level1a, 2, STATS = scalevec, FUN = '/' )
# This is a "normalisation vector", for making the output numbers more manageable.
#cs_gb cv gpp_gb nbp npp_n_gb runoff
norm_vec = c(1e12, 1e12, 1e12/ysec , 1e12, 1e12, 1e9)
# nbp npp csoil cveg
Y_lower <- c(-10, 35, 750, 300)
Y_upper <- c(10, 80, 3000, 800)
# I'm going to set it so that + 4sd aligns approximately with the original limits
# given by Andy Wiltshire. This gives room for uncertainty from the emulator
Y_target = Y_upper - (abs(Y_upper - (Y_lower)) / 2 )# abs() to fix the problem with negative numbers
# standard deviation is derived from the limits and the central target
# (this distance is assumed to be 4 standard deviations.
Y_sd = (Y_upper - Y_target) / 4
names(Y_sd) = colnames(Y_const_level1a_scaled)
p = ncol(Y_const_level1a_scaled)
obs_sd_list = as.list(rep(0.01,p))
disc_list = as.list(rep(0,p))
disc_sd_list = as.list(Y_sd)
thres = 3
mins_aug = apply(X_level1a, 2, FUN = min)
maxes_aug =apply(X_level1a, 2, FUN = max)
# convert Y_target for ingestion into function
Y_target = matrix(Y_target, nrow = 1)
# Histogram of level 1 constraints
hcol = 'darkgrey'
lcol = 'black'
par(mfrow = c(2,2), fg = 'darkgrey', las = 1)
hist(Y_const_level1a_scaled[,'nbp_lnd_sum'], col = hcol, main = 'NBP', xlab = 'GtC/year')
polygon(x = c(-10, 100, 100, -10), y = c(0, 0, 1000, 1000),
col = makeTransparent('tomato2'),
border = makeTransparent('tomato2'))
hist(Y_const_level1a_scaled[,'npp_nlim_lnd_sum'], col = hcol , main = 'NPP', xlab = 'GtC/year')
polygon(x = c(35, 80, 80, 35), y = c(0, 0, 1000, 1000),
col = makeTransparent('tomato2'),
border = makeTransparent('tomato2'))
hist(Y_const_level1a_scaled[,'cSoil_lnd_sum'], col = hcol, main = 'Soil Carbon', xlab = 'GtC')
polygon(x = c(750, 3000, 3000, 750), y = c(0, 0, 1000, 1000),
col = makeTransparent('tomato2'),
border = makeTransparent('tomato2'))
hist(Y_const_level1a_scaled[,'cVeg_lnd_sum'], col = hcol, main = 'Vegetation Carbon', xlab = 'GtC')
polygon(x = c(300, 800, 800, 300), y = c(0, 0, 1000, 1000),
col = makeTransparent('tomato2'),
border = makeTransparent('tomato2'))
# remove to level 1a Relative to toplevel_ix
toplevel_to_level_1a_ix <-(toplevel_ix[-Y_nlevel0_ix])[level1a_ix]
# So further constraining to level 2 can be associated back to the top level.
level2_ix = which(Y_const_level1a_scaled[,'nbp_lnd_sum'] > -10 &
Y_const_level1a_scaled[,'npp_nlim_lnd_sum'] > 35 & Y_const_level1a_scaled[,'npp_nlim_lnd_sum'] < 80 &
Y_const_level1a_scaled[,'cSoil_lnd_sum'] > 750 & Y_const_level1a_scaled[,'cSoil_lnd_sum'] < 3000 &
Y_const_level1a_scaled[,'cVeg_lnd_sum'] > 300 & Y_const_level1a_scaled[,'cVeg_lnd_sum'] < 800
)
# Build an emulator for total land carbon uptake at the end of the century
# ensemble of modern landsink
landsink_modern_ix <- which(years[-1] %in% 1994:2013)
landsink_modern_ens <- (apply(landsink_ens[, landsink_modern_ix], 1, mean))
# observations of modern land sink
hist_ix <- which(historical_carbon_budget$Year %in% 1994:2013)
landsink_modern_obs <- mean(historical_carbon_budget$`land sink`[hist_ix ])
# This is all 499 members
landsink_modern_err <- landsink_modern_ens - landsink_modern_obs
landsink_modern_err_level1a <- landsink_modern_err[toplevel_to_level_1a_ix]#
#[level2_ix, ]
# Build emulators
# Identify the parts of parameter space where the differences are low
# Are we getting close for the right reasons? What else is going wrong?
par(mfrow = c(4,8), mar = c(3,2,2,1))
for(i in 1:d){
plot(X_level1a[, i],landsink_modern_err_level1a, )
}
NA
NA
fit_landsink_err <- km(~.,design = X_level1a, response = landsink_modern_err_level1a)
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~alpha_io + a_wl_io + bio_hum_cn + b_wl_io + dcatch_dlai_io +
dqcrit_io + dz0v_dh_io + f0_io + fd_io + g_area_io + g_root_io +
g_wood_io + gs_nvg_io + hw_sw_io + kaps_roth + knl_io + lai_max_io +
lai_min_io + lma_io + n_inorg_turnover + nmass_io + nr_io +
retran_l_io + retran_r_io + r_grow_io + rootd_ft_io + sigl_io +
sorp + tleaf_of_io + tlow_io + tupp_io + l_vg_soil
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 1.698141 1.994798 1.990622 1.998154 1.778477 2 2 2 1.998084 2 2 2 1.99598 2 1.989889 1.997502 1.989483 1.98997 1.987916 1.983347 1.988424 2 1.990947 1.995643 1.994232 1.992247 2 2 2
- best initial criterion value(s) : -105.3316
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 105.33 |proj g|= 1.7763
At iterate 1 f = 104.53 |proj g|= 1.6751
At iterate 2 f = 100.62 |proj g|= 1.4962
At iterate 3 f = 98.816 |proj g|= 1.7742
At iterate 4 f = 97.817 |proj g|= 1.4271
At iterate 5 f = 96.597 |proj g|= 1.5206
At iterate 6 f = 94.6 |proj g|= 1.65
At iterate 7 f = 93.132 |proj g|= 1.8704
At iterate 8 f = 88.072 |proj g|= 1.7725
At iterate 9 f = 87.267 |proj g|= 1.6414
At iterate 10 f = 85.706 |proj g|= 1.4582
At iterate 11 f = 84.78 |proj g|= 1.3998
At iterate 12 f = 84.03 |proj g|= 1.1195
At iterate 13 f = 83.553 |proj g|= 1.6739
At iterate 14 f = 83.191 |proj g|= 1.0929
At iterate 15 f = 82.995 |proj g|= 1.0632
At iterate 16 f = 82.302 |proj g|= 1.4633
At iterate 17 f = 82.075 |proj g|= 0.86198
At iterate 18 f = 81.591 |proj g|= 0.71824
At iterate 19 f = 81.455 |proj g|= 0.46283
At iterate 20 f = 81.404 |proj g|= 0.42424
At iterate 21 f = 81.218 |proj g|= 0.51844
At iterate 22 f = 81.171 |proj g|= 1.6242
At iterate 23 f = 81.147 |proj g|= 0.41785
At iterate 24 f = 81.133 |proj g|= 0.37589
At iterate 25 f = 81.102 |proj g|= 0.5201
At iterate 26 f = 81.071 |proj g|= 0.39852
At iterate 27 f = 81.042 |proj g|= 0.39513
At iterate 28 f = 81.028 |proj g|= 0.20922
At iterate 29 f = 81.026 |proj g|= 0.13888
At iterate 30 f = 81.019 |proj g|= 0.22736
At iterate 31 f = 81.013 |proj g|= 0.30157
At iterate 32 f = 81 |proj g|= 0.42243
At iterate 33 f = 80.992 |proj g|= 0.26538
At iterate 34 f = 80.987 |proj g|= 0.19665
At iterate 35 f = 80.984 |proj g|= 0.26379
At iterate 36 f = 80.982 |proj g|= 0.17344
At iterate 37 f = 80.979 |proj g|= 0.38048
At iterate 38 f = 80.97 |proj g|= 0.71058
At iterate 39 f = 80.962 |proj g|= 0.43608
At iterate 40 f = 80.957 |proj g|= 0.20584
At iterate 41 f = 80.955 |proj g|= 0.23125
At iterate 42 f = 80.954 |proj g|= 0.18816
At iterate 43 f = 80.953 |proj g|= 0.33499
At iterate 44 f = 80.952 |proj g|= 0.094717
At iterate 45 f = 80.952 |proj g|= 0.048754
At iterate 46 f = 80.952 |proj g|= 0.046396
At iterate 47 f = 80.951 |proj g|= 0.098753
At iterate 48 f = 80.95 |proj g|= 0.080994
At iterate 49 f = 80.949 |proj g|= 0.37884
At iterate 50 f = 80.948 |proj g|= 0.084042
At iterate 51 f = 80.947 |proj g|= 0.062484
At iterate 52 f = 80.946 |proj g|= 0.11765
At iterate 53 f = 80.945 |proj g|= 0.17239
At iterate 54 f = 80.944 |proj g|= 0.088964
At iterate 55 f = 80.942 |proj g|= 0.11693
At iterate 56 f = 80.94 |proj g|= 0.17136
At iterate 57 f = 80.938 |proj g|= 0.18586
At iterate 58 f = 80.937 |proj g|= 0.048801
At iterate 59 f = 80.937 |proj g|= 0.032499
At iterate 60 f = 80.937 |proj g|= 0.057869
At iterate 61 f = 80.937 |proj g|= 0.086366
At iterate 62 f = 80.936 |proj g|= 0.050552
At iterate 63 f = 80.936 |proj g|= 0.0452
At iterate 64 f = 80.936 |proj g|= 0.041857
At iterate 65 f = 80.936 |proj g|= 0.11762
At iterate 66 f = 80.936 |proj g|= 0.036882
At iterate 67 f = 80.936 |proj g|= 0.01985
At iterate 68 f = 80.936 |proj g|= 0.027425
At iterate 69 f = 80.935 |proj g|= 0.03622
At iterate 70 f = 80.935 |proj g|= 0.074419
At iterate 71 f = 80.935 |proj g|= 0.023301
At iterate 72 f = 80.935 |proj g|= 0.024319
At iterate 73 f = 80.935 |proj g|= 0.020644
At iterate 74 f = 80.935 |proj g|= 0.074316
At iterate 75 f = 80.935 |proj g|= 0.033345
At iterate 76 f = 80.935 |proj g|= 0.014117
At iterate 77 f = 80.935 |proj g|= 0.012839
At iterate 78 f = 80.935 |proj g|= 0.090801
At iterate 79 f = 80.935 |proj g|= 0.016325
At iterate 80 f = 80.935 |proj g|= 0.010319
At iterate 81 f = 80.935 |proj g|= 0.006214
At iterate 82 f = 80.935 |proj g|= 0.0088201
At iterate 83 f = 80.935 |proj g|= 0.0063239
At iterate 84 f = 80.935 |proj g|= 0.0033038
At iterate 85 f = 80.935 |proj g|= 0.0029901
At iterate 86 f = 80.935 |proj g|= 0.0061585
At iterate 87 f = 80.935 |proj g|= 0.0015403
At iterate 88 f = 80.935 |proj g|= 0.0011796
iterations 88
function evaluations 99
segments explored during Cauchy searches 96
BFGS updates skipped 0
active bounds at final generalized Cauchy point 18
norm of the final projected gradient 0.0011796
final function value 80.9348
F = 80.9348
final value 80.934787
converged
plot(fit_landsink_err)
The function addNroyDesignPoints builds an emulator for each model output in Y. It compares the output of each emulator at a number of candidate desin points, and chooses a space-filling set of them that that are Not Ruled Out Yet (statistically close to the observation at Y_target).
# Two strategies - plot land sink error against parameters, and identify bits of parameter space with smallest error
#low_error_ix <- landsink_modern_err_level1a
mins <- apply(X_level1a,2,FUN = min)
maxes <- apply(X_level1a,2,FUN = max)
nsamp_unif <- 100000
X_unif <- samp_unif(nsamp_unif, mins = mins, maxes = maxes)
pred_unif <- predict(fit_landsink_err, newdata = X_unif, type = 'UK')
The function write_jules_design here simply takes the points calculated by addNroyDesignPoints and writes them to configuration files.
par(oma = c(0,0,0,3), bg = 'white')
pairs(X_level1a,
labels = 1:d,
gap = 0, lower.panel = NULL, xlim = c(0,1), ylim = c(0,1),
panel = cpoints,
z= landsink_modern_ens_level1a,
col = byr,
cex.labels = 1,
col.axis = 'white',
pch = 20
)
#image.plot(legend.only = TRUE,
# zlim = c(0,1),
# col = blues,
# legend.args = list(text = 'Density of model runs matching the criteria', side = 3, line = 1),
# horizontal = TRUE
#)
# legend('left', legend = paste(1:d, colnames(lhs)), cex = 0.9, bty = 'n')
X_kept <- X_unif[abs(pred_unif$mean) < 1, ]
par(oma = c(0,0,0,3), bg = 'white')
pairs(X_kept,
labels = 1:d,
gap = 0, lower.panel = NULL, xlim = c(0,1), ylim = c(0,1),
panel = dfunc_up,
cex.labels = 1,
col.axis = 'white',
dfunc.col = blues)
image.plot(legend.only = TRUE,
zlim = c(0,1),
col = blues,
legend.args = list(text = 'Density of model runs matching the criteria', side = 3, line = 1),
horizontal = TRUE
)
legend('left', legend = paste(1:d, colnames(lhs)), cex = 0.9, bty = 'n')
NA
NA
NA
NA
NA
Check that the augmented design produces what we expect. New ensemble members should be somewhat constrained within the boundaries of the original design, if the comparison to data offers any constraint.
# Final output needs to be expressed in terms of original LHS, then put back out to conf files.
# This function adds n.aug potential design points, and finds their implausibility
# score in X.nroy
wave1 = addNroyDesignPoints(X = X_level1a,
Y = Y_const_level1a_scaled,
Y_target = Y_target,
n_aug = 50000,
mins_aug = mins_aug,
maxes_aug = maxes_aug,
thres = 3,
disc_list=disc_list,
disc_sd_list = disc_sd_list,
obs_sd_list = obs_sd_list,
n_app = 500,
nreps = 500)
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~alpha_io + a_wl_io + bio_hum_cn + b_wl_io + dcatch_dlai_io +
dqcrit_io + dz0v_dh_io + f0_io + fd_io + g_area_io + g_root_io +
g_wood_io + gs_nvg_io + hw_sw_io + kaps_roth + knl_io + lai_max_io +
lai_min_io + lma_io + n_inorg_turnover + nmass_io + nr_io +
retran_l_io + retran_r_io + r_grow_io + rootd_ft_io + sigl_io +
sorp + tleaf_of_io + tlow_io + tupp_io + l_vg_soil
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 1.698141 1.994798 1.990622 1.998154 1.778477 2 2 2 1.998084 2 2 2 1.99598 2 1.989889 1.997502 1.989483 1.98997 1.987916 1.983347 1.988424 2 1.990947 1.995643 1.994232 1.992247 2 2 2
- best initial criterion value(s) : -109.2909
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 109.29 |proj g|= 1.871
At iterate 1 f = 100.41 |proj g|= 1.3975
At iterate 2 f = 96.533 |proj g|= 1.3088
At iterate 3 f = 95.227 |proj g|= 1.2724
At iterate 4 f = 92.512 |proj g|= 1.5964
At iterate 5 f = 91.143 |proj g|= 1.7368
At iterate 6 f = 89.279 |proj g|= 1.6991
At iterate 7 f = 88.195 |proj g|= 1.7046
At iterate 8 f = 87.014 |proj g|= 1.5114
At iterate 9 f = 85.689 |proj g|= 1.0118
At iterate 10 f = 85.023 |proj g|= 1.7091
At iterate 11 f = 84.569 |proj g|= 1.3563
At iterate 12 f = 84.158 |proj g|= 0.80825
At iterate 13 f = 84.09 |proj g|= 1.6904
At iterate 14 f = 83.823 |proj g|= 1.6909
At iterate 15 f = 83.55 |proj g|= 0.81435
At iterate 16 f = 83.371 |proj g|= 0.96783
At iterate 17 f = 83.094 |proj g|= 1.1149
At iterate 18 f = 82.902 |proj g|= 0.63225
At iterate 19 f = 82.876 |proj g|= 1.6631
At iterate 20 f = 82.821 |proj g|= 0.47627
At iterate 21 f = 82.812 |proj g|= 0.44135
At iterate 22 f = 82.724 |proj g|= 0.87459
At iterate 23 f = 82.656 |proj g|= 0.80084
At iterate 24 f = 82.618 |proj g|= 0.37465
At iterate 25 f = 82.608 |proj g|= 0.27736
At iterate 26 f = 82.599 |proj g|= 0.18904
At iterate 27 f = 82.587 |proj g|= 0.29552
At iterate 28 f = 82.563 |proj g|= 0.53817
At iterate 29 f = 82.536 |proj g|= 0.389
At iterate 30 f = 82.52 |proj g|= 0.27542
At iterate 31 f = 82.509 |proj g|= 0.43571
At iterate 32 f = 82.496 |proj g|= 0.39767
At iterate 33 f = 82.472 |proj g|= 0.67351
At iterate 34 f = 82.447 |proj g|= 1.0541
At iterate 35 f = 82.426 |proj g|= 0.41252
At iterate 36 f = 82.407 |proj g|= 0.36104
At iterate 37 f = 82.39 |proj g|= 0.37105
At iterate 38 f = 82.352 |proj g|= 0.40153
At iterate 39 f = 82.345 |proj g|= 0.48576
At iterate 40 f = 82.338 |proj g|= 0.30354
At iterate 41 f = 82.333 |proj g|= 0.28668
At iterate 42 f = 82.321 |proj g|= 0.24732
At iterate 43 f = 82.309 |proj g|= 0.34561
At iterate 44 f = 82.295 |proj g|= 0.29314
At iterate 45 f = 82.283 |proj g|= 0.5463
At iterate 46 f = 82.269 |proj g|= 0.55403
At iterate 47 f = 82.266 |proj g|= 0.38142
At iterate 48 f = 82.264 |proj g|= 0.15815
At iterate 49 f = 82.26 |proj g|= 0.11062
At iterate 50 f = 82.258 |proj g|= 0.1582
At iterate 51 f = 82.255 |proj g|= 0.22033
At iterate 52 f = 82.254 |proj g|= 0.13105
At iterate 53 f = 82.253 |proj g|= 0.05804
At iterate 54 f = 82.253 |proj g|= 0.15167
At iterate 55 f = 82.253 |proj g|= 0.054998
At iterate 56 f = 82.252 |proj g|= 0.03075
At iterate 57 f = 82.252 |proj g|= 0.029696
At iterate 58 f = 82.252 |proj g|= 0.016543
At iterate 59 f = 82.252 |proj g|= 0.014205
At iterate 60 f = 82.252 |proj g|= 0.026848
At iterate 61 f = 82.252 |proj g|= 0.027097
At iterate 62 f = 82.252 |proj g|= 0.012538
At iterate 63 f = 82.252 |proj g|= 0.011962
At iterate 64 f = 82.252 |proj g|= 0.011229
At iterate 65 f = 82.252 |proj g|= 0.01993
At iterate 66 f = 82.252 |proj g|= 0.012827
At iterate 67 f = 82.252 |proj g|= 0.016769
At iterate 68 f = 82.252 |proj g|= 0.038307
At iterate 69 f = 82.252 |proj g|= 0.02021
At iterate 70 f = 82.252 |proj g|= 0.01395
At iterate 71 f = 82.252 |proj g|= 0.019049
At iterate 72 f = 82.252 |proj g|= 0.028594
At iterate 73 f = 82.252 |proj g|= 0.033337
At iterate 74 f = 82.252 |proj g|= 0.020535
At iterate 75 f = 82.252 |proj g|= 0.0075909
At iterate 76 f = 82.252 |proj g|= 0.0055178
At iterate 77 f = 82.252 |proj g|= 0.033389
At iterate 78 f = 82.252 |proj g|= 0.0071442
At iterate 79 f = 82.252 |proj g|= 0.0111
At iterate 80 f = 82.252 |proj g|= 0.01729
At iterate 81 f = 82.252 |proj g|= 0.01571
At iterate 82 f = 82.252 |proj g|= 0.029493
At iterate 83 f = 82.252 |proj g|= 0.0070285
At iterate 84 f = 82.252 |proj g|= 0.0084202
At iterate 85 f = 82.252 |proj g|= 0.012163
At iterate 86 f = 82.252 |proj g|= 0.089832
At iterate 87 f = 82.252 |proj g|= 0.03557
At iterate 88 f = 82.252 |proj g|= 0.010387
At iterate 89 f = 82.252 |proj g|= 0.02101
At iterate 90 f = 82.252 |proj g|= 0.017472
At iterate 91 f = 82.252 |proj g|= 0.025682
At iterate 92 f = 82.252 |proj g|= 0.0079639
At iterate 93 f = 82.252 |proj g|= 0.0073904
At iterate 94 f = 82.252 |proj g|= 0.018008
At iterate 95 f = 82.252 |proj g|= 0.0062852
At iterate 96 f = 82.252 |proj g|= 0.0046032
At iterate 97 f = 82.252 |proj g|= 0.0028965
At iterate 98 f = 82.251 |proj g|= 0.0083294
At iterate 99 f = 82.251 |proj g|= 0.004218
At iterate 100 f = 82.251 |proj g|= 0.0024721
At iterate 101 f = 82.251 |proj g|= 0.0026606
final value 82.251495
stopped after 101 iterations
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~alpha_io + a_wl_io + bio_hum_cn + b_wl_io + dcatch_dlai_io +
dqcrit_io + dz0v_dh_io + f0_io + fd_io + g_area_io + g_root_io +
g_wood_io + gs_nvg_io + hw_sw_io + kaps_roth + knl_io + lai_max_io +
lai_min_io + lma_io + n_inorg_turnover + nmass_io + nr_io +
retran_l_io + retran_r_io + r_grow_io + rootd_ft_io + sigl_io +
sorp + tleaf_of_io + tlow_io + tupp_io + l_vg_soil
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 1.698141 1.994798 1.990622 1.998154 1.778477 2 2 2 1.998084 2 2 2 1.99598 2 1.989889 1.997502 1.989483 1.98997 1.987916 1.983347 1.988424 2 1.990947 1.995643 1.994232 1.992247 2 2 2
- best initial criterion value(s) : -1383.375
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 1383.4 |proj g|= 1.7664
At iterate 1 f = 1372.9 |proj g|= 1.6648
At iterate 2 f = 1364.8 |proj g|= 1.7747
At iterate 3 f = 1356.7 |proj g|= 1.8961
At iterate 4 f = 1350.1 |proj g|= 1.7144
At iterate 5 f = 1347.8 |proj g|= 1.6582
At iterate 6 f = 1341.7 |proj g|= 1.481
At iterate 7 f = 1337.6 |proj g|= 1.6235
At iterate 8 f = 1335.4 |proj g|= 1.4778
At iterate 9 f = 1334 |proj g|= 0.92855
At iterate 10 f = 1332 |proj g|= 1.5095
At iterate 11 f = 1330.6 |proj g|= 1.0917
At iterate 12 f = 1329.3 |proj g|= 1.2354
At iterate 13 f = 1328.5 |proj g|= 0.82781
At iterate 14 f = 1328.3 |proj g|= 0.9746
At iterate 15 f = 1328.1 |proj g|= 0.55288
At iterate 16 f = 1328 |proj g|= 0.39538
At iterate 17 f = 1327.8 |proj g|= 0.30206
At iterate 18 f = 1327.8 |proj g|= 1.4645
At iterate 19 f = 1327.8 |proj g|= 0.56521
At iterate 20 f = 1327.8 |proj g|= 0.21692
At iterate 21 f = 1327.8 |proj g|= 0.56111
At iterate 22 f = 1327.8 |proj g|= 0.51424
At iterate 23 f = 1327.8 |proj g|= 0.53842
At iterate 24 f = 1327.8 |proj g|= 0.1763
At iterate 25 f = 1327.7 |proj g|= 0.20315
At iterate 26 f = 1327.7 |proj g|= 0.14516
At iterate 27 f = 1327.7 |proj g|= 0.054732
At iterate 28 f = 1327.7 |proj g|= 0.084036
At iterate 29 f = 1327.7 |proj g|= 0.045267
At iterate 30 f = 1327.7 |proj g|= 0.046735
At iterate 31 f = 1327.7 |proj g|= 0.14927
At iterate 32 f = 1327.7 |proj g|= 0.11387
At iterate 33 f = 1327.7 |proj g|= 0.025094
At iterate 34 f = 1327.7 |proj g|= 0.018372
At iterate 35 f = 1327.7 |proj g|= 0.018539
At iterate 36 f = 1327.7 |proj g|= 0.017334
At iterate 37 f = 1327.7 |proj g|= 0.035245
At iterate 38 f = 1327.7 |proj g|= 0.016258
At iterate 39 f = 1327.7 |proj g|= 0.0075892
At iterate 40 f = 1327.7 |proj g|= 0.008652
At iterate 41 f = 1327.7 |proj g|= 0.023457
iterations 41
function evaluations 48
segments explored during Cauchy searches 62
BFGS updates skipped 0
active bounds at final generalized Cauchy point 20
norm of the final projected gradient 0.0234567
final function value 1327.74
F = 1327.74
final value 1327.742870
converged
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~alpha_io + a_wl_io + bio_hum_cn + b_wl_io + dcatch_dlai_io +
dqcrit_io + dz0v_dh_io + f0_io + fd_io + g_area_io + g_root_io +
g_wood_io + gs_nvg_io + hw_sw_io + kaps_roth + knl_io + lai_max_io +
lai_min_io + lma_io + n_inorg_turnover + nmass_io + nr_io +
retran_l_io + retran_r_io + r_grow_io + rootd_ft_io + sigl_io +
sorp + tleaf_of_io + tlow_io + tupp_io + l_vg_soil
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 1.698141 1.994798 1.990622 1.998154 1.778477 2 2 2 1.998084 2 2 2 1.99598 2 1.989889 1.997502 1.989483 1.98997 1.987916 1.983347 1.988424 2 1.990947 1.995643 1.994232 1.992247 2 2 2
- best initial criterion value(s) : -2561.221
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 2561.2 |proj g|= 1.8661
At iterate 1 f = 2533.6 |proj g|= 2
At iterate 2 f = 2519.6 |proj g|= 2
At iterate 3 f = 2516.5 |proj g|= 1.9534
At iterate 4 f = 2510.4 |proj g|= 1.7867
At iterate 5 f = 2505 |proj g|= 1.6826
At iterate 6 f = 2501.5 |proj g|= 1.618
At iterate 7 f = 2494.2 |proj g|= 1.3844
At iterate 8 f = 2492.2 |proj g|= 1.6032
At iterate 9 f = 2491.3 |proj g|= 1.589
At iterate 10 f = 2488.9 |proj g|= 1.53
At iterate 11 f = 2487.5 |proj g|= 1.0728
At iterate 12 f = 2487.2 |proj g|= 1.0711
At iterate 13 f = 2487 |proj g|= 1.1027
At iterate 14 f = 2486.8 |proj g|= 0.47609
At iterate 15 f = 2486.8 |proj g|= 0.42024
At iterate 16 f = 2486.8 |proj g|= 1.2305
At iterate 17 f = 2486.8 |proj g|= 0.38381
At iterate 18 f = 2486.8 |proj g|= 0.22702
At iterate 19 f = 2486.8 |proj g|= 0.21667
At iterate 20 f = 2486.8 |proj g|= 0.17646
At iterate 21 f = 2486.7 |proj g|= 0.202
At iterate 22 f = 2486.7 |proj g|= 0.44121
At iterate 23 f = 2486.7 |proj g|= 0.16229
At iterate 24 f = 2486.7 |proj g|= 0.066349
At iterate 25 f = 2486.7 |proj g|= 0.018863
At iterate 26 f = 2486.7 |proj g|= 0.034152
At iterate 27 f = 2486.7 |proj g|= 0.043297
At iterate 28 f = 2486.7 |proj g|= 0.014902
At iterate 29 f = 2486.7 |proj g|= 0.016268
At iterate 30 f = 2486.7 |proj g|= 0.013669
At iterate 31 f = 2486.7 |proj g|= 0.021967
iterations 31
function evaluations 34
segments explored during Cauchy searches 54
BFGS updates skipped 0
active bounds at final generalized Cauchy point 25
norm of the final projected gradient 0.0219674
final function value 2486.74
F = 2486.74
final value 2486.744525
converged
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~alpha_io + a_wl_io + bio_hum_cn + b_wl_io + dcatch_dlai_io +
dqcrit_io + dz0v_dh_io + f0_io + fd_io + g_area_io + g_root_io +
g_wood_io + gs_nvg_io + hw_sw_io + kaps_roth + knl_io + lai_max_io +
lai_min_io + lma_io + n_inorg_turnover + nmass_io + nr_io +
retran_l_io + retran_r_io + r_grow_io + rootd_ft_io + sigl_io +
sorp + tleaf_of_io + tlow_io + tupp_io + l_vg_soil
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 1.698141 1.994798 1.990622 1.998154 1.778477 2 2 2 1.998084 2 2 2 1.99598 2 1.989889 1.997502 1.989483 1.98997 1.987916 1.983347 1.988424 2 1.990947 1.995643 1.994232 1.992247 2 2 2
- best initial criterion value(s) : -2315.205
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 2315.2 |proj g|= 1.9221
At iterate 1 f = 2314.2 |proj g|= 1.7645
At iterate 2 f = 2314.1 |proj g|= 0.74274
At iterate 3 f = 2313.9 |proj g|= 1.3088
At iterate 4 f = 2313.7 |proj g|= 1.9298
At iterate 5 f = 2313.5 |proj g|= 1.9378
At iterate 6 f = 2313.1 |proj g|= 1.9199
At iterate 7 f = 2312 |proj g|= 1.9412
At iterate 8 f = 2311.8 |proj g|= 1.9461
At iterate 9 f = 2310.4 |proj g|= 1.3481
At iterate 10 f = 2309.3 |proj g|= 1.2924
At iterate 11 f = 2308.7 |proj g|= 1.937
At iterate 12 f = 2308.3 |proj g|= 1.5008
At iterate 13 f = 2308.3 |proj g|= 1.216
At iterate 14 f = 2308.2 |proj g|= 1.8896
At iterate 15 f = 2308.1 |proj g|= 1.8935
At iterate 16 f = 2307.5 |proj g|= 1.9032
At iterate 17 f = 2307 |proj g|= 1.8988
At iterate 18 f = 2304.7 |proj g|= 1.0033
At iterate 19 f = 2303.6 |proj g|= 1.5714
At iterate 20 f = 2303.5 |proj g|= 1.917
At iterate 21 f = 2303.3 |proj g|= 1.9143
At iterate 22 f = 2303.2 |proj g|= 1.9086
At iterate 23 f = 2303.1 |proj g|= 1.8843
At iterate 24 f = 2302.9 |proj g|= 0.70255
At iterate 25 f = 2302.9 |proj g|= 0.68074
At iterate 26 f = 2302.9 |proj g|= 1.9109
At iterate 27 f = 2302.8 |proj g|= 1.7663
At iterate 28 f = 2302.8 |proj g|= 0.67488
At iterate 29 f = 2302.6 |proj g|= 1.0907
At iterate 30 f = 2302.3 |proj g|= 1.9095
At iterate 31 f = 2302.2 |proj g|= 1.9105
At iterate 32 f = 2302 |proj g|= 1.4736
At iterate 33 f = 2302 |proj g|= 1.4695
At iterate 34 f = 2301.8 |proj g|= 1.32
At iterate 35 f = 2301.7 |proj g|= 1.91
At iterate 36 f = 2301.7 |proj g|= 1.3149
At iterate 37 f = 2301.6 |proj g|= 0.83873
At iterate 38 f = 2301.5 |proj g|= 0.96389
At iterate 39 f = 2301.5 |proj g|= 1.3464
At iterate 40 f = 2301.4 |proj g|= 0.53138
At iterate 41 f = 2301.3 |proj g|= 1.8834
At iterate 42 f = 2301.3 |proj g|= 0.82272
At iterate 43 f = 2301.3 |proj g|= 0.75558
At iterate 44 f = 2301.3 |proj g|= 1.8803
At iterate 45 f = 2301.3 |proj g|= 1.8814
At iterate 46 f = 2301.3 |proj g|= 1.8812
At iterate 47 f = 2301.3 |proj g|= 1.881
At iterate 48 f = 2301.2 |proj g|= 1.3784
At iterate 49 f = 2301.2 |proj g|= 0.62431
At iterate 50 f = 2301.2 |proj g|= 1.9114
At iterate 51 f = 2301.2 |proj g|= 1.9123
At iterate 52 f = 2301.1 |proj g|= 1.9116
At iterate 53 f = 2301.1 |proj g|= 0.63241
At iterate 54 f = 2301.1 |proj g|= 0.28367
At iterate 55 f = 2301.1 |proj g|= 0.31082
At iterate 56 f = 2301.1 |proj g|= 0.62345
At iterate 57 f = 2301.1 |proj g|= 1.911
At iterate 58 f = 2301.1 |proj g|= 1.9119
At iterate 59 f = 2301.1 |proj g|= 1.9112
At iterate 60 f = 2301 |proj g|= 0.29321
At iterate 61 f = 2301 |proj g|= 0.31545
At iterate 62 f = 2301 |proj g|= 0.84934
At iterate 63 f = 2301 |proj g|= 1.8836
At iterate 64 f = 2301 |proj g|= 1.8821
At iterate 65 f = 2301 |proj g|= 0.58887
At iterate 66 f = 2301 |proj g|= 1.2003
At iterate 67 f = 2301 |proj g|= 0.43465
At iterate 68 f = 2301 |proj g|= 0.42034
At iterate 69 f = 2301 |proj g|= 0.60752
At iterate 70 f = 2301 |proj g|= 1.6659
At iterate 71 f = 2301 |proj g|= 1.8816
At iterate 72 f = 2300.9 |proj g|= 1.8816
At iterate 73 f = 2300.9 |proj g|= 1.8828
At iterate 74 f = 2300.9 |proj g|= 1.8811
At iterate 75 f = 2300.9 |proj g|= 0.40944
At iterate 76 f = 2300.9 |proj g|= 0.36834
At iterate 77 f = 2300.9 |proj g|= 0.74183
At iterate 78 f = 2300.9 |proj g|= 1.6322
At iterate 79 f = 2300.9 |proj g|= 1.914
At iterate 80 f = 2300.9 |proj g|= 1.9141
At iterate 81 f = 2300.9 |proj g|= 1.9155
At iterate 82 f = 2300.9 |proj g|= 1.1075
At iterate 83 f = 2300.8 |proj g|= 0.97412
At iterate 84 f = 2300.8 |proj g|= 0.96614
At iterate 85 f = 2300.8 |proj g|= 1.8816
At iterate 86 f = 2300.8 |proj g|= 1.8815
At iterate 87 f = 2300.8 |proj g|= 1.9143
At iterate 88 f = 2300.7 |proj g|= 0.61654
At iterate 89 f = 2300.7 |proj g|= 0.61993
At iterate 90 f = 2300.7 |proj g|= 0.61744
At iterate 91 f = 2300.7 |proj g|= 0.59652
At iterate 92 f = 2300.7 |proj g|= 0.47719
At iterate 93 f = 2300.7 |proj g|= 0.53494
At iterate 94 f = 2300.7 |proj g|= 0.53394
At iterate 95 f = 2300.7 |proj g|= 0.52042
At iterate 96 f = 2300.7 |proj g|= 0.60048
At iterate 97 f = 2300.7 |proj g|= 1.9142
At iterate 98 f = 2300.7 |proj g|= 1.9152
At iterate 99 f = 2300.6 |proj g|= 1.9161
At iterate 100 f = 2300.6 |proj g|= 1.9168
At iterate 101 f = 2300.6 |proj g|= 1.3656
final value 2300.595796
stopped after 101 iterations
Visualise the predicted outputs at the NROY points of the old design, and the new suggested design.
# this needs sorting
source('~/myRpackages/julesR/vignettes/default_jules_parameter_perturbations.R')
# Easiest way to generate a design of the right size is to have a "fac" which takes
# the names from the parameter list, and then multiplies everything by 0.5 or 2
tf <- 'l_vg_soil'
# we don't want anything that is TRUE/FALSE to be in fac
fac_init <- names(paramlist)
not_tf_ix <- which(names(paramlist)!=tf)
paramlist_trunc <-paramlist[not_tf_ix]
fac <- names(paramlist_trunc)
maxfac <-lapply(paramlist_trunc,function(x) x$max[which.max(x$max)] / x$standard[which.max(x$max)])
minfac <- lapply(paramlist_trunc,function(x) x$min[which.max(x$max)] / x$standard[which.max(x$max)])
Interestingly, these aren’t perfectly within the original hard boundaries set by Andy, even though I’ve set those boundaries to be the +- 4 standard deviation threholds in the History Match. I suggest this is because there is model discrepancy, and that there is considerable wriggle room induced from emulator uncertainty.
In particular, it appears that vegetation carbon is difficult to keep high, and that many NROY proposed members have a fairly low vegetation carbon. This might need a discrepancy term, or adjusting in some other way. It certainly needs exploring, and a OAAT plot might give clues as to the parameters to choose.
# create a directory for the configuration files
confdir <- 'conf_files_augment_JULES-ES-1p0'
dir.create(confdir)
X_mm <- wave1$X_mm
# This is the function that writes the configuration files.
write_jules_design(X_mm = X_mm, paramlist=paramlist, n = nrow(X_mm),
fac = fac, minfac = minfac, maxfac = maxfac,
tf = tf,
fnprefix = paste0(confdir,'/param-perturb-P'),
lhsfn = paste0(confdir,'/lhs_example.txt'),
stanfn = paste0(confdir,'/stanparms_example.txt'),
allstanfn = paste0(confdir,'/allstanparms_example.txt'),
rn = 12,
startnum = 500)
How good are the four emulators that we’ve built? Are there biases? (there’s no real evidence of this)
X_mm <- wave1$X_mm
pairs(rbind(X, X_mm), xlim = c(0,1), ylim = c(0,1), gap = 0, lower.panel = NULL,
col = c(rep('grey', nrow(X)), rep('red', nrow(X_mm))),
pch = c(rep(21, nrow(X)), rep(20, nrow(X_mm)))
)
par(xpd = NA)
legend('bottom',
legend = c('Original design', 'New points'),
col = c('grey', 'red'),
inset = 0.15,
cex = 1.5,
pch = c(21,20)
)
It’s obviously hard to maintain a high vegetation carbon in particular. What parameter values might you choose to do this, and what might be the trade-offs you have to make?
Y_mm_list <- vector(mode ='list', length = length(wave1$fit_list))
for(i in 1:length(wave1$fit_list)){
y_mm <- predict(object=wave1$fit_list[[i]], newdata = wave1$X_mm, type = 'UK')
Y_mm_list[[i]] <- y_mm
}
First, what parameters affect vegetation carbon and how? How sure are we about that?
# Histogram of level 1 constraints
hcol = 'darkgrey'
lcol = 'black'
par(mfrow = c(2,2), fg = 'darkgrey', las = 1)
discsd <- c(disc_sd_list, recursive = TRUE)
hist(Y_const_level1a_scaled[,'nbp_lnd_sum'], col = hcol, main = 'NBP', xlab = 'GtC/year')
hist(Y_mm_list[[1]]$mean, add = TRUE, col = 'black')
polygon(x = c(-10, 100, 100, -10), y = c(0, 0, 1000, 1000),
col = makeTransparent('tomato2'),
border = makeTransparent('tomato2'))
rug(Y_target[1], col = 'black')
rug(c(Y_target[1] + 3*discsd[1],Y_target[1] - 3*discsd[1]) , col = 'red')
some values will be clipped
hist(Y_const_level1a_scaled[,'npp_nlim_lnd_sum'], col = hcol , main = 'NPP', xlab = 'GtC/year')
hist(Y_mm_list[[2]]$mean, add = TRUE, col = 'black')
polygon(x = c(35, 80, 80, 35), y = c(0, 0, 1000, 1000),
col = makeTransparent('tomato2'),
border = makeTransparent('tomato2'))
rug(Y_target[2], col = 'black')
rug(c(Y_target[2] + 3*discsd[2],Y_target[2] - 3*discsd[2]) , col = 'red')
hist(Y_const_level1a_scaled[,'cSoil_lnd_sum'], col = hcol, main = 'Soil Carbon', xlab = 'GtC')
hist(Y_mm_list[[3]]$mean, add = TRUE, col = 'black')
polygon(x = c(750, 3000, 3000, 750), y = c(0, 0, 1000, 1000),
col = makeTransparent('tomato2'),
border = makeTransparent('tomato2'))
rug(Y_target[3], col = 'black')
rug(c(Y_target[3] + 3*discsd[3],Y_target[3] - 3*discsd[3]) , col = 'red')
hist(Y_const_level1a_scaled[,'cVeg_lnd_sum'], col = hcol, main = 'Vegetation Carbon', xlab = 'GtC')
hist(Y_mm_list[[4]]$mean, add = TRUE, col = 'black')
polygon(x = c(300, 800, 800, 300), y = c(0, 0, 1000, 1000),
col = makeTransparent('tomato2'),
border = makeTransparent('tomato2'))
rug(Y_target[4], col = 'black')
rug(c(Y_target[4] + 3*discsd[4],Y_target[4] - 3*discsd[4]) , col = 'red')
NA
par(mfrow = c(2,2))
for(i in 1:4){
hist(wave1$pred_list[[i]]$mean, main = colnames(Y_const_level1a_scaled)[i])
}
NA
NA
What might be the trade-offs for a high (or accurate) vegetation carbon? are they acceptable? Plot the oaat sensitivity of the other 3 outputs we’re calibrating on.
X_oaat_level1a <- oaat_design(X_level1a, n=21, med = TRUE)
colnames(X_oaat_level1a) = colnames(X)
y_oaat <- predict.km(wave1$fit_list[[4]], newdata = X_oaat_level1a, type = 'UK')
What do the emulators make of the design points which actually make Andy’s “hard boundary” criteria? If we leave them out, do they still place the output within the hard boundaries?
oaatLinePlot(X_oaat = X_oaat_level1a, y_oaat_mean = y_oaat$mean, y_oaat_sd = y_oaat$sd,
n_oaat = 21,nr = 6, nc = 6)
NA
NA
Do a leave-one-out cross validation of points inside the hard boundaries using the wave1 fits.
Y_oaat_const_level1a_scaled <- matrix(ncol = ncol(Y_const_level1a_scaled), nrow = nrow(X_oaat_level1a))
for(i in 1:ncol(Y_const_level1a_scaled)){
y_oaat <- predict.km(wave1$fit_list[[i]], newdata = X_oaat_level1a, type = 'UK')
Y_oaat_const_level1a_scaled[,i] <- y_oaat$mean
}
Y_oaat_const_level1a_scaled_norm <- normalize(Y_oaat_const_level1a_scaled)
oaatLinePlotMulti(X_oaat = X_oaat_level1a, Y_oaat = Y_oaat_const_level1a_scaled_norm , n_oaat = 21, nr = 6, nc = 6,
lwd = 2)
reset()
legend('top', c('nbp', 'npp', 'csoil', 'cveg'), col = c(1,2,3,4), lty = 'solid', lwd = 2, horiz = TRUE)
NA
NA
We see in the leave-one-out analysis that the emulator is consistently under-predicting the vegetation carbon (though the uncertainty estimate often covers the actual value).This suggests (1) that there isn’t really a huge problem with a model discrepancy (or at least that isn’t the only problem), and (2) the history matching is working as it should, and taking into account a not-great emulator.
aw_boundary_ix = which(Y_const_level1a_scaled[,'nbp_lnd_sum'] > -10 &
Y_const_level1a_scaled[,'npp_nlim_lnd_sum'] > 35 & Y_const_level1a_scaled[,'npp_nlim_lnd_sum'] < 80 &
Y_const_level1a_scaled[,'cSoil_lnd_sum'] > 750 & Y_const_level1a_scaled[,'cSoil_lnd_sum'] < 3000 &
Y_const_level1a_scaled[,'cVeg_lnd_sum'] > 300 & Y_const_level1a_scaled[,'cVeg_lnd_sum'] < 800
)
X_aw_boundary = X_level1a[aw_boundary_ix, ]
Y_aw_boundary = Y_const_level1a_scaled[aw_boundary_ix, ]
Is a two-step emulator any better at emulating those crucial points which fall within aw’s hard boundaries? First, create a list of emulator fits.
fitlist_Y_const_level1a_scaled <- vector(mode = 'list', length = ncol(Y_const_level1a_scaled))
for(i in 1:ncol(Y_const_level1a_scaled)){
y <- Y_const_level1a_scaled[,i]
fit <- twoStep_glmnet(X = X_level1a, y)
fitlist_Y_const_level1a_scaled[[i]] <- fit
}
loo_mean_Y_level1a <- matrix(nrow = nrow(X_level1a), ncol = ncol(Y_const_level1a_scaled))
loo_sd_Y_level1a <- matrix(nrow = nrow(X_level1a), ncol = ncol(Y_const_level1a_scaled))
for(i in 1:ncol(Y_const_level1a_scaled)){
loo <- leaveOneOut.km(wave1$fit_list[[i]],type = 'UK', trend.reestim = TRUE )
loo_mean_Y_level1a[,i] <- loo$mean
loo_sd_Y_level1a[,i] <- loo$sd
}
It doesn’t appear that the two-step emulator (here plotted in red) is doing any better than the regular emulator.
par(mfrow = c(2,2))
for(i in 1:ncol(loo_mean_Y_level1a)){
rn <- range(c(loo_mean_Y_level1a[aw_boundary_ix,i] - (2*loo_sd_Y_level1a[aw_boundary_ix,i]) , loo_mean_Y_level1a[aw_boundary_ix,i] + (2*loo_sd_Y_level1a[aw_boundary_ix,i]) ))
plot(Y_const_level1a_scaled[aw_boundary_ix, i], loo_mean_Y_level1a[aw_boundary_ix,i], ylim = rn, main = colnames(Y_const_level1a_scaled)[i], xlab = 'actual', ylab = 'predicted')
segments(x0 = Y_const_level1a_scaled[aw_boundary_ix, i], y0 = loo_mean_Y_level1a[aw_boundary_ix,i] - (2*loo_sd_Y_level1a[aw_boundary_ix,i]) , x1 = Y_const_level1a_scaled[aw_boundary_ix, i] , y1 = loo_mean_Y_level1a[aw_boundary_ix,i] + (2*loo_sd_Y_level1a[aw_boundary_ix,i]) , col = makeTransparent('black', 70))
abline(0,1)
}
NA
NA
Two other things I can think of to check: 1) how about using “multistart” to choose different starting conditions for optimising the emulators and 2) Using a flat prior for the mean function rather than a linear prior.
fitlist_Y_const_level1a_scaled <- vector(mode = 'list', length = ncol(Y_const_level1a_scaled))
for(i in 1:ncol(Y_const_level1a_scaled)){
y <- Y_const_level1a_scaled[,i]
fit <- twoStep_glmnet(X = X_level1a, y)
fitlist_Y_const_level1a_scaled[[i]] <- fit
}
Loading required package: Matrix
Attaching package: ‘Matrix’
The following object is masked from ‘package:spam’:
det
Loaded glmnet 4.1-1
loo_mean_glmnet_Y_level1a <- matrix(nrow = nrow(X_level1a), ncol = ncol(Y_const_level1a_scaled))
loo_sd_glmnet_Y_level1a <- matrix(nrow = nrow(X_level1a), ncol = ncol(Y_const_level1a_scaled))
for(i in 1:ncol(Y_const_level1a_scaled)){
loo <- leaveOneOut.km(fitlist_Y_const_level1a_scaled[[i]]$emulator,type = 'UK', trend.reestim = TRUE )
loo_mean_glmnet_Y_level1a[,i] <- loo$mean
loo_sd_glmnet_Y_level1a[,i] <- loo$sd
}
par(mfrow = c(2,2))
for(i in 1:ncol(loo_mean_Y_level1a)){
rn <- range(c(loo_mean_Y_level1a[aw_boundary_ix,i] - (2*loo_sd_Y_level1a[aw_boundary_ix,i]) , loo_mean_Y_level1a[aw_boundary_ix,i] + (2*loo_sd_Y_level1a[aw_boundary_ix,i]) ))
plot(Y_const_level1a_scaled[aw_boundary_ix, i], loo_mean_Y_level1a[aw_boundary_ix,i], ylim = rn, main = colnames(Y_const_level1a_scaled)[i], xlab = 'actual', ylab = 'predicted')
points(Y_const_level1a_scaled[aw_boundary_ix, i], loo_mean_glmnet_Y_level1a[aw_boundary_ix,i], col = 'red')
segments(x0 = Y_const_level1a_scaled[aw_boundary_ix, i], y0 = loo_mean_Y_level1a[aw_boundary_ix,i] - (2*loo_sd_Y_level1a[aw_boundary_ix,i]) , x1 = Y_const_level1a_scaled[aw_boundary_ix, i] , y1 = loo_mean_Y_level1a[aw_boundary_ix,i] + (2*loo_sd_Y_level1a[aw_boundary_ix,i]) , col = makeTransparent('black', 70))
abline(0,1)
}
Input from Eddy Robertson:
“We can assume that the majority of vegetation carbon is stored in tree trunks so, the carbon density of trees is approximately (cVeg_lnd_mean / treeFrac_lnd_mean). Although I suppose it’s possible that in the PPE the shrubs have become tree-like, so it might be interesting to plot cVeg_lnd_mean versus (shrubFrac_lnd_mean + treeFrac_lnd_mean) as well. The first question is whether cVeg_lnd_mean increases linearly with treeFrac_lnd_mean. Then if this turned out to be interesting, we could produce a treeCVeg_lnd_mean output.”
fitlist_flatprior_Y_const_level1a_scaled <- vector(mode = 'list', length = ncol(Y_const_level1a_scaled))
for(i in 1:ncol(Y_const_level1a_scaled)){
y <- Y_const_level1a_scaled[,i]
fit <- km(formula =~1, design = X_level1a, response = y)
fitlist_flatprior_Y_const_level1a_scaled[[i]] <- fit
}
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~1
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 1.698141 1.994798 1.990622 1.998154 1.778477 2 2 2 1.998084 2 2 2 1.99598 2 1.989889 1.997502 1.989483 1.98997 1.987916 1.983347 1.988424 2 1.990947 1.995643 1.994232 1.992247 2 2 2
- best initial criterion value(s) : -324.7357
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 324.74 |proj g|= 1.8894
At iterate 1 f = 154.68 |proj g|= 2
At iterate 2 f = 144.37 |proj g|= 1.9477
At iterate 3 f = 140.12 |proj g|= 1.8272
At iterate 4 f = 137.65 |proj g|= 1.5752
At iterate 5 f = 135.35 |proj g|= 1.4243
At iterate 6 f = 134.81 |proj g|= 1.1667
At iterate 7 f = 134.52 |proj g|= 1.0068
At iterate 8 f = 134.47 |proj g|= 0.55475
At iterate 9 f = 134.44 |proj g|= 0.37207
At iterate 10 f = 134.43 |proj g|= 0.20987
At iterate 11 f = 134.42 |proj g|= 0.076796
At iterate 12 f = 134.42 |proj g|= 0.026753
At iterate 13 f = 134.42 |proj g|= 0.01759
At iterate 14 f = 134.42 |proj g|= 0.0060535
At iterate 15 f = 134.42 |proj g|= 0.0041787
At iterate 16 f = 134.42 |proj g|= 0.0021465
At iterate 17 f = 134.42 |proj g|= 0.00377
At iterate 18 f = 134.42 |proj g|= 0.001123
At iterate 19 f = 134.42 |proj g|= 0.00021622
iterations 19
function evaluations 20
segments explored during Cauchy searches 42
BFGS updates skipped 0
active bounds at final generalized Cauchy point 19
norm of the final projected gradient 0.000216221
final function value 134.421
F = 134.421
final value 134.420708
converged
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~1
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 1.698141 1.994798 1.990622 1.998154 1.778477 2 2 2 1.998084 2 2 2 1.99598 2 1.989889 1.997502 1.989483 1.98997 1.987916 1.983347 1.988424 2 1.990947 1.995643 1.994232 1.992247 2 2 2
- best initial criterion value(s) : -1621.762
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 1621.8 |proj g|= 1.7706
At iterate 1 f = 1507.2 |proj g|= 1.4766
At iterate 2 f = 1423.3 |proj g|= 1.7768
At iterate 3 f = 1418.6 |proj g|= 1.4019
At iterate 4 f = 1415.9 |proj g|= 1.6446
At iterate 5 f = 1415.3 |proj g|= 1.7139
At iterate 6 f = 1415.1 |proj g|= 1.6554
At iterate 7 f = 1414.8 |proj g|= 1.4108
At iterate 8 f = 1414.7 |proj g|= 0.99795
At iterate 9 f = 1414.5 |proj g|= 0.73402
At iterate 10 f = 1414.5 |proj g|= 0.66567
At iterate 11 f = 1414.5 |proj g|= 0.13919
At iterate 12 f = 1414.5 |proj g|= 0.0858
At iterate 13 f = 1414.5 |proj g|= 0.034268
At iterate 14 f = 1414.5 |proj g|= 0.063708
At iterate 15 f = 1414.5 |proj g|= 0.010821
At iterate 16 f = 1414.5 |proj g|= 0.0075671
At iterate 17 f = 1414.5 |proj g|= 0.012372
At iterate 18 f = 1414.5 |proj g|= 0.0071278
At iterate 19 f = 1414.5 |proj g|= 0.0036723
iterations 19
function evaluations 21
segments explored during Cauchy searches 70
BFGS updates skipped 0
active bounds at final generalized Cauchy point 25
norm of the final projected gradient 0.00367225
final function value 1414.5
F = 1414.5
final value 1414.500017
converged
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~1
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 1.698141 1.994798 1.990622 1.998154 1.778477 2 2 2 1.998084 2 2 2 1.99598 2 1.989889 1.997502 1.989483 1.98997 1.987916 1.983347 1.988424 2 1.990947 1.995643 1.994232 1.992247 2 2 2
- best initial criterion value(s) : -2800.645
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 2800.6 |proj g|= 1.8463
At iterate 1 f = 2616.7 |proj g|= 1.6218
At iterate 2 f = 2605.4 |proj g|= 1.553
At iterate 3 f = 2583.7 |proj g|= 1.6224
At iterate 4 f = 2577.2 |proj g|= 1.011
At iterate 5 f = 2573 |proj g|= 1.3781
At iterate 6 f = 2571.3 |proj g|= 1.308
At iterate 7 f = 2571.1 |proj g|= 0.9583
At iterate 8 f = 2571 |proj g|= 0.62272
At iterate 9 f = 2570.9 |proj g|= 0.44321
At iterate 10 f = 2570.9 |proj g|= 0.12021
At iterate 11 f = 2570.9 |proj g|= 0.055708
At iterate 12 f = 2570.9 |proj g|= 0.016351
At iterate 13 f = 2570.9 |proj g|= 0.0027779
iterations 13
function evaluations 16
segments explored during Cauchy searches 52
BFGS updates skipped 0
active bounds at final generalized Cauchy point 27
norm of the final projected gradient 0.00277786
final function value 2570.93
F = 2570.93
final value 2570.925355
converged
optimisation start
------------------
* estimation method : MLE
* optimisation method : BFGS
* analytical gradient : used
* trend model : ~1
* covariance model :
- type : matern5_2
- nugget : NO
- parameters lower bounds : 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
- parameters upper bounds : 2 2 1.999244 1.698141 1.994798 1.990622 1.998154 1.778477 2 2 2 1.998084 2 2 2 1.99598 2 1.989889 1.997502 1.989483 1.98997 1.987916 1.983347 1.988424 2 1.990947 1.995643 1.994232 1.992247 2 2 2
- best initial criterion value(s) : -2465.963
N = 32, M = 5 machine precision = 2.22045e-16
At X0, 0 variables are exactly at the bounds
At iterate 0 f= 2466 |proj g|= 1.7876
At iterate 1 f = 2357.6 |proj g|= 2
At iterate 2 f = 2342.2 |proj g|= 2
At iterate 3 f = 2334.4 |proj g|= 1.9202
At iterate 4 f = 2331.2 |proj g|= 1.8804
At iterate 5 f = 2325 |proj g|= 1.7272
At iterate 6 f = 2322 |proj g|= 1.6469
At iterate 7 f = 2320.5 |proj g|= 1.4532
At iterate 8 f = 2317.5 |proj g|= 1.4216
At iterate 9 f = 2317 |proj g|= 1.3362
At iterate 10 f = 2316.1 |proj g|= 1.2141
At iterate 11 f = 2315.5 |proj g|= 1.1842
At iterate 12 f = 2315.4 |proj g|= 0.93199
At iterate 13 f = 2315.4 |proj g|= 0.5059
At iterate 14 f = 2315.4 |proj g|= 0.38256
At iterate 15 f = 2315.4 |proj g|= 0.53325
At iterate 16 f = 2315.4 |proj g|= 0.18709
At iterate 17 f = 2315.4 |proj g|= 0.038636
At iterate 18 f = 2315.4 |proj g|= 0.02819
At iterate 19 f = 2315.4 |proj g|= 0.033483
At iterate 20 f = 2315.4 |proj g|= 0.015972
At iterate 21 f = 2315.4 |proj g|= 0.014807
At iterate 22 f = 2315.4 |proj g|= 0.0076813
At iterate 23 f = 2315.4 |proj g|= 0.0071707
iterations 23
function evaluations 27
segments explored during Cauchy searches 50
BFGS updates skipped 0
active bounds at final generalized Cauchy point 21
norm of the final projected gradient 0.00717074
final function value 2315.38
F = 2315.38
final value 2315.375074
converged
Is the range of carbon densities narrower in the “hard boundary” set?
loo_mean_flatprior_Y_level1a <- matrix(nrow = nrow(X_level1a), ncol = ncol(Y_const_level1a_scaled))
loo_sd_flatprior_Y_level1a <- matrix(nrow = nrow(X_level1a), ncol = ncol(Y_const_level1a_scaled))
for(i in 1:ncol(Y_const_level1a_scaled)){
loo <- leaveOneOut.km(fitlist_flatprior_Y_const_level1a_scaled[[i]],type = 'UK', trend.reestim = TRUE )
loo_mean_flatprior_Y_level1a[,i] <- loo$mean
loo_sd_flatprior_Y_level1a[,i] <- loo$sd
}
par(mfrow = c(2,2))
for(i in 1:ncol(loo_mean_Y_level1a)){
rn <- range(c(loo_mean_Y_level1a[aw_boundary_ix,i] - (2*loo_sd_Y_level1a[aw_boundary_ix,i]) , loo_mean_Y_level1a[aw_boundary_ix,i] + (2*loo_sd_Y_level1a[aw_boundary_ix,i]) ))
plot(Y_const_level1a_scaled[aw_boundary_ix, i], loo_mean_Y_level1a[aw_boundary_ix,i], ylim = rn, main = colnames(Y_const_level1a_scaled)[i], xlab = 'actual', ylab = 'predicted')
points(Y_const_level1a_scaled[aw_boundary_ix, i], loo_mean_flatprior_Y_level1a[aw_boundary_ix,i], col = 'red')
segments(x0 = Y_const_level1a_scaled[aw_boundary_ix, i], y0 = loo_mean_Y_level1a[aw_boundary_ix,i] - (2*loo_sd_Y_level1a[aw_boundary_ix,i]) , x1 = Y_const_level1a_scaled[aw_boundary_ix, i] , y1 = loo_mean_flatprior_Y_level1a[aw_boundary_ix,i] + (2*loo_sd_flatprior_Y_level1a[aw_boundary_ix,i]) , col = makeTransparent('black', 70))
abline(0,1)
}
NA
NA
NA
#pdf(file = 'vegC_density.pdf', width = 6, height = 6)
plot(Y_level0[,'treeFrac_lnd_mean'],Y_level0[,'cVeg_lnd_mean'], main = "Vegetation (tree) carbon density, Level0",
xlab = 'treeFrac_lnd_mean', ylab = 'cVeg_lnd_mean' )
#dev.off()
For example, what effect has the AW “hard boundary” constraint produced on ranges of the other (marginal) outputs? Which constraint is doing the majority of the work?
A function to find the proportion of output space that is removed (or retained) when applying a constraint.
Y_level1a_aw <- Y_level1a[aw_boundary_ix, ]
X_level1a_aw <- X_level1a[aw_boundary_ix, ]
#pdf(file = 'vegC_density_aw.pdf', width = 6, height = 6)
plot(Y_level1a[,'treeFrac_lnd_mean'],Y_level1a[,'cVeg_lnd_mean'], main = "Vegetation (tree) carbon density",
xlab = 'treeFrac_lnd_mean', ylab = 'cVeg_lnd_mean' )
points( Y_level1a_aw[,'treeFrac_lnd_mean'],Y_level1a_aw[,'cVeg_lnd_mean'], pch = 19, col = 'red')
legend('topleft', legend = c('Level1a','AW constraints'), pch = c(21, 19), col = c('black', 'red'))
# dev.off()
c_density <- Y_level1a[,'treeFrac_lnd_mean'] / Y_level1a[,'cVeg_lnd_mean']
hist(c_density)
NA
NA
NA
All constraints together take the normalized range of all the outputs to a little under a half of the original range, on average. Of course, four of the inputs are constrained here, which has quite a large impact.
# Pairs plot of output
y_names_mean <- c('nbp_lnd_mean', 'fLuc_lnd_mean', 'npp_nlim_lnd_mean', 'cSoil_lnd_mean',
'cVeg_lnd_mean', 'landCoverFrac_lnd_mean', 'fHarvest_lnd_mean',
'lai_lnd_mean', 'rh_lnd_mean', 'treeFrac_lnd_mean', 'c3PftFrac_lnd_mean',
'c4PftFrac_lnd_mean', 'shrubFrac_lnd_mean', 'baresoilFrac_lnd_mean')
Y_level1a_mean <- Y_level1a[,y_names_mean]
pcol <- rep('black', nrow(Y_level1a_mean))
pcol[aw_boundary_ix] <- 'red'
pairs(Y_level1a_mean, col = pcol, lower.panel = NULL, pch = 19, cex.labels = 1.5)
NA
NA
NA
NA
We can see what impacts the constraints have individually
constraint_prop <- function(Y, constraint_ix){
Yconst <- Y[constraint_ix, ]
Yconst_norm <- normalize(Yconst, wrt = Y)
rn <- apply(Yconst_norm, 2, range)
out <- rn
out
}
The NBP constraint has no marginal impact
Y_constraint_plot <- function(constraint_range, constraint_columns, ...){
# A function to plot the output of constraint_prop
par(mar = c(12,4,3,2),las = 2)
pcol = rep('black', ncol(constraint_range))
pcol[constraint_columns] <- 'red' # plot the outputs where we have specified the constraints in red.
plot(1:ncol(constraint_range),constraint_range[2,], ylim = c(0,1) , axes = FALSE, xlab = '', ylab = 'range of ensemble (fraction)', col = pcol, pch = 19, ...)
points(1:ncol(constraint_range), constraint_range[1,], col = pcol, pch = 19)
segments(x0 = 1:ncol(constraint_range), y0 = constraint_range[1,], x1 = 1:ncol(constraint_range), y1 = constraint_range[2,], col = pcol, lwd =2 )
axis(side = 1, labels = colnames(constraint_range), at = 1:ncol(constraint_range))
axis(2)
abline(h = c(0,1), col = 'red')
}
Y_level1a_mean_aw_norm_rn <- constraint_prop(Y = Y_level1a_mean, constraint_ix = aw_boundary_ix)
mean_constraint_all <- mean(Y_level1a_mean_aw_norm_rn[2, ] - Y_level1a_mean_aw_norm_rn[1, ])
Y_constraint_plot(Y_level1a_mean_aw_norm_rn,constraint_columns = c(c(1,3,4,5)), main = paste('mean constrained range =', round(mean_constraint_all,3)))
nbp_ix <- which(Y_const_level1a_scaled[,'nbp_lnd_sum'] > -10)
npp_ix <- which(Y_const_level1a_scaled[,'npp_nlim_lnd_sum'] > 35 & Y_const_level1a_scaled[,'npp_nlim_lnd_sum'] < 80 )
cSoil_ix <- which(Y_const_level1a_scaled[,'cSoil_lnd_sum'] > 750 & Y_const_level1a_scaled[,'cSoil_lnd_sum'] < 3000)
cVeg_ix <- which(Y_const_level1a_scaled[,'cVeg_lnd_sum'] > 300 & Y_const_level1a_scaled[,'cVeg_lnd_sum'] < 800)
Vegetation carbon (cVeg) has the strongest impact on everything else. This is no suprise, given that so few of the ensemble members seem to simulate carbon vegetation high enough.
Y_level1a_mean_nbp_const <- constraint_prop(Y = Y_level1a_mean, constraint_ix = nbp_ix )
mean_constraint_nbp <- mean(Y_level1a_mean_nbp_const[2, ] - Y_level1a_mean_nbp_const[1, ])
Y_constraint_plot(Y_level1a_mean_nbp_const,1, main = paste('mean constrained range =', round(mean_constraint_nbp,3)))
Y_level1a_mean_npp_const <- constraint_prop(Y = Y_level1a_mean, constraint_ix = npp_ix )
mean_constraint_npp <- mean(Y_level1a_mean_npp_const[2, ] - Y_level1a_mean_npp_const[1, ])
Y_constraint_plot(Y_level1a_mean_npp_const,3, main = paste('mean constrained range =', round(mean_constraint_npp,3)))
Y_level1a_mean_cSoil_const <- constraint_prop(Y = Y_level1a_mean, constraint_ix = cSoil_ix )
mean_constraint_cSoil <- mean(Y_level1a_mean_cSoil_const[2, ] - Y_level1a_mean_cSoil_const[1, ])
Y_constraint_plot(Y_level1a_mean_cSoil_const,4, main = paste('mean constrained range =', round(mean_constraint_cSoil,3)))
Y_level1a_mean_cVeg_const <- constraint_prop(Y = Y_level1a_mean, constraint_ix = cVeg_ix )
mean_constraint_cVeg <- mean(Y_level1a_mean_cVeg_const[2, ] - Y_level1a_mean_cVeg_const[1, ])
Y_constraint_plot(Y_level1a_mean_cVeg_const,5, main = paste('mean constrained range =', round(mean_constraint_cVeg,3)))
# I actually wrote code to do this createKmFitList, which isn't parallel at the moment.
# Maybe make it parallel in the next version?
library(doParallel)
registerDoParallel(cores = detectCores() - 1)
direct_twoStep_glmnet_parallel <- function(X, Y, ...){
d <- ncol(Y)
foreach(i = 1:d) %dopar% {
y <- Y[,i]
em <- twoStep_glmnet(X=X, y = y, ...)
}
}
library(doParallel)
cores=detectCores()
cl <- makeCluster(cores[1]-1) #not to overload your computer
registerDoParallel(cl)
fitlist_test <- createKmFitListParallel(X = X_level1a, Y = Y_const_level1a_scaled, formula = ~., multistart = 4)
stopCluster(cl)
plot(fitlist_test[[4]])
#summariseKmLoo <- function(fit){
# loo <- leaveOneOut.km(fit, type = 'UK', trend.reestim = TRUE)
# loo_mean <- mean(loo$)
#}
# system.time(testloop <- direct_twoStep_glmnet(X=X_level1, Y_level1))
# Test parallel processing against a foreach processing (and maybe mclapply?)
#system.time(testloop_par <- direct_twoStep_glmnet_parallel(X=X_level1, Y_level1))
emList <- function(X, Y){
# Create a list of objects to be emulated
# X design matrix with (nrow) instances of (ncol) inputs
# Y matrix of outputs, with one row
# for each row of X
d <- ncol(Y)
em_list <- vector(mode='list', length=d)
for(i in 1:d){
em_obj <- NULL
em_obj$X <- X
em_obj$y <- Y[, i]
em_list[[i]] <- em_obj
}
em_list
}
#test <- emlist(X_level1, Y_level1)
#mclapply(X = test, FUN = km)
# function from hde for direct prediction
direct.pred = function (form, X, Y, Xnew, ...){
# Directly applies km in parallel to predict each column of an ensemble
ens.list = emlist(X = X, Y = Y)
km.list = mclapply(ens.list, FUN = km.wrap, form = form)
pred.list = mclapply(km.list, FUN = km.pred.wrap, Xnew = as.matrix(Xnew, nrow = 1), type = "UK")
out.mean = sapply(pred.list, FUN=extract.predmean)
out.sd = sapply(pred.list, FUN=extract.predsd)
return(list(mean = out.mean, sd = out.sd))
}